Usar filas de obtenção no Go

Esta página oferece uma vista geral das filas de obtenção no ambiente padrão do App Engine.

Nas filas de envio, as tarefas são entregues a um serviço de processamento com base na configuração da fila. Nas filas de obtenção, o serviço de processamento tem de pedir tarefas à fila. A fila responde permitindo que esse trabalhador tenha acesso exclusivo para processar a tarefa durante um período especificado, que se denomina concessão.

A aplicação transfere a tarefa para o serviço de fila de tarefas e, em seguida, o trabalhador aluga-a ao serviço de fila de tarefas

Com as filas de obtenção, também pode agrupar tarefas relacionadas através de etiquetas e, em seguida, configurar o seu worker para obter várias tarefas com uma determinada etiqueta de uma só vez. Este processo é denominado processamento em lote.

Se um trabalhador não conseguir processar uma tarefa antes da expiração da respetiva concessão, pode renová-la ou deixá-la expirar. Nesse momento, outro trabalhador pode adquiri-la. Quando o trabalho associado a uma tarefa estiver concluído, o trabalhador tem de eliminá-la.

A utilização de filas de obtenção requer que o seu código processe algumas funções que são automatizadas nas filas de envio:

Aumentar o número de trabalhadores
O seu código tem de dimensionar o número de trabalhadores com base no volume de processamento. Se o seu código não processar o dimensionamento, corre o risco de desperdiçar recursos de computação se não houver tarefas a processar. Também corre o risco de latência se tiver demasiadas tarefas a processar.
A eliminar as tarefas
O seu código também tem de eliminar explicitamente as tarefas após o processamento. Nas filas de envio, o App Engine elimina as tarefas por si. Se o seu trabalhador não eliminar as tarefas da fila de obtenção após o processamento, outro trabalhador volta a processar a tarefa. Isto desperdiça recursos de computação e arrisca-se a gerar erros se as tarefas não forem idempotentes.

As filas de obtenção no ambiente padrão do App Engine são criadas definindo uma propriedade num ficheiro de configuração denominado queue.yaml.

Fluxo de trabalho da fila de solicitações

Os trabalhadores que processam tarefas de filas de obtenção têm de ser definidos num serviço que é executado no ambiente padrão do App Engine.

O fluxo de trabalho é o seguinte:

  1. Crie uma fila de obtenção com queue.yaml.
  2. Cria tarefas e adiciona-as à fila.
  3. O trabalhador que criou aluga a tarefa, usando TaskQueue.
  4. O App Engine envia dados de tarefas para o trabalhador na resposta de concessão.
  5. O trabalhador processa a tarefa. Se a tarefa não for executada antes da expiração do arrendamento, o trabalhador pode modificar a duração do arrendamento. Se o aluguer expirar, a tarefa fica disponível para ser alugada a outro trabalhador.
  6. Depois de uma tarefa ser processada com êxito, o trabalhador elimina-a.

O que se segue?