Como alocar tarefas pull em lease

Quando as tarefas estão em uma fila pull, o worker pode alocá-las. Após o processamento das tarefas, ele precisa excluí-las.

Antes de começar

Contexto importante

  • Esse método é aplicável apenas a workers que estejam sendo executados em um serviço no ambiente padrão.
  • Ao usar filas pull, você é responsável pelo escalonamento dos workers com base no volume de processamento.

Como colocar tarefas em lease

Depois que as tarefas estiverem na fila, um worker poderá colocar uma ou mais delas em lease usando o método leaseTasks(). Pode haver um pequeno atraso até que as tarefas adicionadas recentemente usando add() sejam disponibilizadas por leaseTasks().

Ao solicitar um lease, você especifica o número de tarefas a serem alocadas (até o máximo de 1.000) e a duração do lease em segundos (até o máximo de uma semana). A duração do lease deve ser longa o suficiente para garantir que haja tempo suficiente para a conclusão da tarefa mais lenta antes do fim do período de lease. É possível modificar um lease de tarefa usando modifyTaskLease().

Uma tarefa em lease fica indisponível para processamento por outro worker até que o lease expire.

O exemplo de código a seguir aloca tarefas da fila pull-queue por uma hora:

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

Processamento em lote com tags de tarefa

Nem todas as tarefas são iguais. Seu código pode marcar tarefas com tags e depois escolher as que serão colocadas em lease por tag. A tag funciona como um filtro.

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

Agora aloque as tarefas filtradas:

// 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.

Como regular taxas de pesquisa

Os workers que pesquisam a fila quanto a tarefas para colocar em lease precisam detectar se estão tentando o lease de tarefas mais rapidamente do que a fila pode fornecer. Se essa falha ocorrer, as seguintes exceções de leaseTasks() poderão ser geradas:


Seu código precisa capturar essas exceções, desativar a chamada de leaseTasks() e tentar novamente mais tarde. Para evitar esse problema, defina um prazo de RPC maior ao chamar leaseTasks(). Você também precisa recuar quando uma solicitação de alocação retornar uma lista vazia de tarefas.

Se você gerar mais de 10 solicitações LeaseTasks por fila, apenas as 10 primeiras retornarão resultados. Se as solicitações ultrapassarem esse limite, OK será retornado sem nenhum resultado.

Como monitorar tarefas no Console do Cloud

Para ver informações sobre todas as tarefas e filas no aplicativo:

  1. Abra a página Filas de tarefas no Console do Cloud e selecione a guia Filas pull na barra de menu na parte superior da página.

    Acessar a guia Filas pull

  2. Clique no nome da fila em que você está interessado e abra a página de detalhes dela. Serão exibidas todas as tarefas na fila selecionada.

Como excluir tarefas

Depois que o worker conclui uma tarefa, ele precisa excluí-la da fila. Se continuarem sendo exibidas tarefas restantes em uma fila depois que o worker terminar de processá-las, é provável que tenha ocorrido falha no worker. Nesse caso, as tarefas serão processadas por outro worker.

É possível excluir uma tarefa específica ou uma lista de tarefas usando deleteTask(). Você precisa saber o nome da tarefa para excluí-la. É possível encontrar nomes de tarefas no Task object retornado por leaseTasks().

O exemplo de código a seguir mostra como excluir uma tarefa de uma fila:

q.deleteTask(task);