Lease delle attività pull

Quando le attività sono in una coda in modalità pull, un worker può assegnarle in leasing. Dopo che le attività sono state elaborate, il lavoratore deve eliminarle.

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

Quando le attività sono in coda, un worker può acquisire una o più attività in leasing utilizzando il metodo leaseTasks(). Potrebbe verificarsi un leggero ritardo prima che le attività aggiunte di recente utilizzando add() diventino disponibili tramite leaseTasks().

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

Il leasing di un'attività la rende non disponibile per l'elaborazione da parte di un altro worker e rimane non disponibile fino alla scadenza del lease.

Il seguente esempio di codice lease delle attività dalla coda pull-queue per un'ora:

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

Batch con tag attività

Non tutte le attività sono uguali; il tuo codice può "taggare" le attività e poi scegliere le attività da acquisire in base ai tag. Il tag funge da filtro.

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

Quindi, esegui il leasing delle 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.

Regolazione delle tariffe per il polling

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


Il codice deve rilevare queste eccezioni, interrompere la chiamata al numero leaseTasks() e riprovare più tardi. Per evitare questo problema, valuta la possibilità di impostare una scadenza RPC più elevata quando chiami leaseTasks(). Dovresti anche disattivarlo quando una richiesta di lease restituisce un elenco vuoto di attività.

Se generi più di 10 richieste di 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. Visualizza tutte le attività nella coda selezionata.

Eliminazione delle attività

Una volta completata un'attività, il worker deve eliminarla dalla coda. Se noti delle attività che rimangono in coda dopo che un worker ha finito di elaborarle, è probabile che il worker abbia avuto esito negativo; in questo caso, le attività verranno elaborate da un altro worker.

Puoi eliminare una singola attività o un elenco di attività utilizzando deleteTask(). Devi conoscere il nome di un'attività per poterla eliminare. Puoi trovare i nomi delle attività nella Task object restituita da leaseTasks().

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

q.deleteTask(task);