Leasing Pull Tasks

Assim que as tarefas estiverem numa fila de obtenção, um trabalhador pode alugá-las. Depois de processadas, o trabalhador tem de eliminar as tarefas.

Antes de começar

Contexto importante

  • Este método só é aplicável a trabalhadores que estão a ser executados num serviço no ambiente padrão.
  • Quando usa filas de obtenção, é responsável por dimensionar os seus trabalhadores com base no volume de processamento.

Tarefas de leasing

Depois de as tarefas estarem na fila, um trabalhador pode alugá-las através do método taskqueue.Lease. Pode haver um pequeno atraso antes de as tarefas adicionadas recentemente através do taskqueue.Add ficarem disponíveis através do taskqueue.Lease.

Quando pede uma concessão, especifica o número de tarefas a conceder (até um máximo de 1000 tarefas) e a duração da concessão em segundos (até um máximo de uma semana). A duração da concessão tem de ser suficientemente longa para garantir que a tarefa mais lenta tem tempo para terminar antes de o período de concessão expirar. Pode modificar uma concessão de tarefa através de taskqueue.ModifyLease.

O aluguer de uma tarefa torna-a indisponível para processamento por outro trabalhador e permanece indisponível até o aluguer expirar.

O exemplo de código seguinte aluga 100 tarefas da fila pull-queue durante uma hora:

tasks, err := taskqueue.Lease(ctx, 100, "pull-queue", 3600)

Processamento em lote com etiquetas de tarefas

Nem todas as tarefas são iguais. O seu código pode "etiquetar" tarefas e, em seguida, escolher tarefas para alugar por etiqueta. A etiqueta funciona como um filtro. O seguinte exemplo de código demonstra como etiquetar tarefas e, em seguida, arrendar por etiquetas:

_, err = taskqueue.Add(ctx, &taskqueue.Task{
	Payload: []byte("parse"), Method: "PULL", Tag: "parse",
}, "pull-queue")
_, err = taskqueue.Add(ctx, &taskqueue.Task{
	Payload: []byte("render"), Method: "PULL", Tag: "render",
}, "pull-queue")

// leases render tasks, but not parse
tasks, err = taskqueue.LeaseByTag(ctx, 100, "pull-queue", 3600, "render")

// Leases up to 100 tasks that have same tag.
// Tag is that of "oldest" task by ETA.
tasks, err = taskqueue.LeaseByTag(ctx, 100, "pull-queue", 3600, "")

Regulamentar as taxas de sondagem

Os trabalhadores que sondam a fila para alugar tarefas devem detetar se estão a tentar alugar tarefas mais rapidamente do que a fila as pode fornecer. Se esta falha ocorrer, é devolvido um erro de recuo de taskqueue.Lease.

O seu código tem de processar estes erros, recuar da chamada de taskqueue.Lease e, em seguida, tentar novamente mais tarde. Para evitar este problema, considere definir um prazo de RPC mais elevado quando chamar taskqueue.Lease. Também deve recuar quando um pedido de concessão devolve uma lista de tarefas vazia. Se gerar mais de 10 pedidos LeaseTasks por fila por segundo, apenas os primeiros 10 pedidos devolvem resultados. Se os pedidos excederem este limite, é devolvido OK com zero resultados.

Monitorizar tarefas na Google Cloud consola

Para ver informações sobre todas as tarefas e filas na sua aplicação:

  1. Abra a página Cloud Tasks na Google Cloud consola e procure o valor Pull na coluna Tipo.

    Aceda ao Cloud Tasks

  2. Clique no nome da fila na qual tem interesse para abrir a página de detalhes da fila. Apresenta todas as tarefas na fila selecionada.

Eliminar tarefas

Assim que um trabalhador conclui uma tarefa, tem de a eliminar da fila. Se vir tarefas restantes numa fila depois de um trabalhador terminar o processamento das mesmas, é provável que o trabalhador tenha falhado. Neste caso, as tarefas são processadas por outro trabalhador.

Pode eliminar uma lista de tarefas, como a devolvida por taskqueue.Lease, transmitindo-a a taskqueue.DeleteMulti:

tasks, err = taskqueue.Lease(ctx, 100, "pull-queue", 3600)
// Perform some work with the tasks here

taskqueue.DeleteMulti(ctx, tasks, "pull-queue")