Lease delle attività di pull

Quando le attività si trovano in una coda in modalità pull, un worker può prenderle in leasing. Dopo l'elaborazione delle attività deve essere eliminata dal worker.

Prima di iniziare

Contesto importante

  • Questo metodo è applicabile solo ai worker in esecuzione all'interno di un servizio nell'ambiente standard.
  • Quando utilizzi le code in modalità pull, sei responsabile della scalabilità dei worker in base al volume di elaborazione.

Attività di leasing

Una volta che le attività sono in coda, un lavoratore può acquisirne una o più in leasing utilizzando il metodo leaseTasks(). Potrebbe verificarsi un breve ritardo prima che le attività aggiunte di recente utilizzando add() diventano disponibili tramite leaseTasks().

Quando richiedi un lease, specifichi il numero di attività da acquisire in leasing (fino a un massimo di 1000) e la durata del lease in secondi (fino a un massimo di una settimana). La durata del lease deve essere sufficientemente lunga per garantire che l'attività più lenta abbia il tempo di terminare prima della scadenza del periodo di lease. Puoi modificare un leasing di attività utilizzando modifyTaskLease().

Se una task viene concessa in leasing, non è disponibile per l'elaborazione da parte di un altro worker e rimane inaccessibile fino alla scadenza del leasing.

Il seguente esempio di codice acquisisce in leasing le attività dalla coda pull-queue per un'ora:

List<TaskHandle> tasks = q.leaseTasks(3600, TimeUnit.SECONDS, numberOfTasksToLease);

Raggruppamento con i tag delle attività

Non tutte le attività sono uguali; il tuo codice può "taggare" e poi scegli le attività di cui eseguire il leasing in base al tag. Il tag funge da filtro.

q.add(
    TaskOptions.Builder.withMethod(TaskOptions.Method.PULL)
        .payload(content.toString())
        .tag("process".getBytes()));

Quindi, concedi in leasing le attività filtrate:

// Lease only tasks tagged with "process"
List<TaskHandle> tasks =
    q.leaseTasksByTag(3600, TimeUnit.SECONDS, numberOfTasksToLease, "process");
// You can also specify a tag to lease via LeaseOptions passed to leaseTasks.

Regolare le frequenze di polling

I worker che eseguono il polling della coda per il lease delle attività devono rilevare se stanno tentando di eseguire il lease delle attività più velocemente di quanto la coda possa fornirle. In questo caso, è possibile generare le seguenti eccezioni da leaseTasks():


Il codice deve intercettare queste eccezioni, interrompere la chiamata a leaseTasks() e riprovare più tardi. Per evitare questo problema, ti consigliamo di impostare una scadenza RPC più alta quando chiami leaseTasks(). Inoltre, devi eseguire il backoff quando una richiesta di leasing restituisce un elenco vuoto di attività.

Se generi più di 10 richieste LeaseTasks per coda al secondo, solo le prime 10 richieste restituiranno risultati. Se le richieste superano questo limite, viene restituito OK con zero risultati.

Monitoraggio delle attività nella console Google Cloud

Per visualizzare le informazioni su tutte le attività e le code nella tua applicazione:

  1. Apri la pagina Cloud Tasks nella console Google Cloud e cerca il valore Pull nella colonna Tipo.

    Vai a Cloud Tasks

  2. Fai clic sul nome della coda che ti interessa per aprire la pagina dei dettagli della coda. Vengono visualizzate tutte le attività nella coda selezionata.

Eliminazione attività in corso...

Una volta completata un'attività, il worker deve eliminarla dalla coda. Se noti delle attività rimanenti in una coda dopo che un worker le ha elaborate, è probabile che l'operazione non sia riuscita; in questo caso le attività verranno elaborate da un altro worker.

Puoi eliminare una singola attività o un elenco di attività utilizzando deleteTask(). Per eliminare un'attività, devi conoscere il nome. Puoi trovare i nomi delle attività nel Task object restituito da leaseTasks().

Il seguente esempio di codice mostra come eliminare un'attività da una coda:

q.deleteTask(task);