Creazione delle attività

Questa pagina descrive come creare le attività e inserirle nelle code in modalità push. Quando vuoi elaborare un'attività, devi creare un nuovo oggetto attività e inserirlo in una coda. Puoi specificare esplicitamente il servizio e l'handler che elaborano l'attività e, facoltativamente, passare all'handler i dati specifici dell'attività. Puoi anche perfezionare la configurazione dell'attività, ad esempio pianificare un momento futuro in cui deve essere eseguita o limitare il numero di volte in cui vuoi che venga eseguito un nuovo tentativo in caso di errore.

Creazione di una nuova attività

Per creare e mettere in coda un'attività, crea un oggetto PushTask e chiama il relativo metodo add(). Puoi aggiungere elementi a una coda specificata in queue.yaml fornendo un argomento del nome della coda a add(). In alternativa, chiamare add() senza argomenti aggiunge l'attività alla coda predefinita.

Puoi anche aggiungere attività collettivamente a una coda utilizzando PushQueue. Nell'esempio seguente, due oggetti PushTask vengono aggiunti a una PushQueue utilizzando il metodo addTasks().

Il seguente esempio di codice mostra come aggiungere una singola attività:

$task = new PushTask(
    '/worker',
    ['name' => 'john doe', 'action' => 'send_reminder']);
$task_name = $task->add();

Il seguente esempio di codice mostra come aggiungere più attività contemporaneamente:

$task1 = new PushTask('/someUrl');
$task2 = new PushTask('/someOtherUrl');
$queue = new PushQueue();
$queue->addTasks([$task1, $task2]);

Quando utilizzi PushTask e PushQueue, includi queste istruzioni nella parte superiore del file PHP:

use google\appengine\api\taskqueue\PushTask;
use google\appengine\api\taskqueue\PushQueue;

Specifica del servizio worker

Quando un'attività viene rimossa dalla coda, il servizio Task Queue la inoltra a un servizio worker. Ogni attività ha un target e un url, che determinano il servizio e l'handler che alla fine eseguiranno l'attività.

target

La destinazione specifica il servizio che riceverà la richiesta HTTP per eseguire l'attività. Si tratta di una stringa che specifica un servizio/una versione/un'istanza in uno dei formati canonici. I moduli più utilizzati sono:

    service
    version.service
    instance.version.service

La stringa target viene anteposta al nome di dominio della tua app. Esistono tre modi per impostare la destinazione per un'attività:

  • Dichiara il target quando crei l'attività. Puoi impostare il target in modo esplicito durante la creazione dell'attività utilizzando il parametro header nell'array $options quando crei l'oggetto PushTask:

    $task = new PushTask(
        '/worker',
        [],
        ['header' => "Host: versionHostname"]);

  • Includi un'istruzione target quando definisci una coda in queue.yaml, come nella definizione di queue-blue. Tutte le attività aggiunte a una coda con un target utilizzeranno questo target, anche se all'attività è stato assegnato un target diverso al momento della creazione.

  • Se non viene specificato alcun target in base a uno dei due metodi precedenti, la destinazione della task è la versione del servizio che la mette in coda. Tieni presente che se inserisci in coda un'attività dal servizio e dalla versione predefiniti in questo modo e la versione predefinita cambia prima dell'esecuzione dell'attività, questa verrà eseguita nella nuova versione predefinita.

url

url seleziona uno degli handler nel servizio di destinazione che eseguirà l'attività.

url deve corrispondere a uno dei pattern URL dell'handler nel servizio di destinazione. url può includere parametri di ricerca se il metodo specificato nell'attività è GET o PULL. Se non viene specificato url, viene utilizzato l'URL predefinito /_ah/queue/[QUEUE_NAME], dove [QUEUE_NAME] è il nome della fila della task.

Trasferimento dei dati all'handler

Puoi passare i dati all'handler come parametri di ricerca nell'URL dell'attività, ma solo se il metodo specificato nell'attività è GET o PULL.

Il costruttore PushTask ha un argomento posizionale per query_data. I dati sono in genere un dizionario di coppie chiave-valore. Se il metodo dell'attività è POST o PUT, i dati vengono aggiunti al payload della richiesta HTTP. Se il metodo è GET, viene aggiunto all'URL come parametri di ricerca.

Assegnare un nome a un'attività

Quando crei una nuova attività, App Engine assegna un nome univoco per impostazione predefinita. Tuttavia, puoi assegnare il tuo nome a un'attività utilizzando il parametro name. Un vantaggio dell'assegnazione di nomi alle attività è che le attività con nome vengono eliminate, il che significa che puoi utilizzare i nomi delle attività per garantire che un'attività venga aggiunta una sola volta. La deduplica continua per 9 giorni dopo il completamento o l'eliminazione della task.

Tieni presente che la logica di deduplica introduce un overhead significativo delle prestazioni, con un conseguente aumento delle latenze e potenzialmente dei tassi di errore associati alle attività con nome. Questi costi possono aumentare notevolmente se i nomi delle attività sono sequenziali, ad esempio con i timestamp. Pertanto, se assegni i tuoi nomi, consigliamo di utilizzare un prefisso ben distribuito per i nomi delle attività, ad esempio un hash dei contenuti.

Se assegni i tuoi nomi alle attività, tieni presente che la lunghezza massima del nome è di 500 caratteri e che il nome può contenere lettere maiuscole e minuscole, numeri, trattini bassi e trattini.

Passaggi successivi