Use a gestão de filas ou o ficheiro queue.yaml

Esta página explica as diferenças entre usar a API Cloud Tasks para gerir filas e usar o carregamento de um ficheiro queue.yaml do Cloud Tasks para alcançar os mesmos objetivos. Também aborda algumas das armadilhas da combinação de mecanismos e como lidar com problemas comuns.

Introdução

A API Cloud Tasks fornece uma interface independente do App Engine para o serviço App Engine Task Queue. Como parte dessa interface, oferece a capacidade de gerir filas, incluindo fazê-lo através da consola ou do comando gcloud. As filas criadas pela API Cloud Tasks são acessíveis a partir do SDK do App Engine e vice-versa. Para manter a compatibilidade, é possível usar o ficheiro de configuração usado pelo SDK do App Engine, queue.yaml, para também criar e configurar filas a serem usadas através da API Cloud Tasks. No entanto, a combinação da configuração através de ficheiro com a configuração através da API Cloud Tasks pode produzir consequências inesperadas.

Armadilhas da combinação de queue.yaml com métodos de gestão de filas do Cloud Tasks

Para o serviço subjacente,os ficheiros queue.yaml são definitivos. O carregamento de um queue.yaml que omita filas existentes no seu projeto, independentemente da forma como foram criadas, faz com que essas filas sejam desativadas ou pausadas. Assim, se usar a API Cloud Tasks para chamar CreateQueue ou UpdateQueue e, em seguida, carregar um ficheiro queue.yaml que os omita, as filas criadas nas chamadas Cloud Tasks são desativadas.

Considere o seguinte cenário:

  1. Chame CreateQueue para criar uma fila denominada "cloud-tasks-queue".
  2. Carregue um ficheiro queue.yaml com o seguinte conteúdo:

    queue:
    - name: queue-yaml-queue
    

Qual é o estado atual das filas neste projeto? A fila denominada "cloud-tasks-queue" e quaisquer outras filas existentes anteriormente estão no estado DISABLED, e a fila denominada "queue-yaml-queue" está no estado RUNNING.

Este comportamento pode ser surpreendente se criar filas através da API Cloud Tasks. As instruções abaixo explicam como retomar uma fila desativada.

Da mesma forma, se uma fila estiver desativada na API Cloud Tasks, mas aparecer posteriormente num ficheiro queue.yaml carregado, essa fila é retomada.

Se uma fila for eliminada com o método DeleteQueue e aparecer posteriormente num ficheiro queue.yaml, o carregamento do ficheiro queue.yaml pode falhar porque não é permitido reutilizar os nomes das filas durante vários dias após a eliminação.

Práticas recomendadas

Se não conhece o Cloud Tasks ou o App Engine, use a API Cloud Tasks exclusivamente para gerir as suas filas e evite usar o queue.yaml por completo. Os métodos de gestão de filas do Cloud Tasks oferecem aos utilizadores mais opções na criação, atualização e eliminação de filas.

No entanto, se for um utilizador existente do queue.yaml, só deve ponderar mudar para métodos de gestão de filas se compreender os erros de misturar o queue.yaml com os métodos de gestão de filas do Cloud Tasks.

Para impedir que os utilizadores misturem métodos de gestão de tarefas, uma opção é criar uma app Web ou uma ferramenta de linha de comandos que todos os utilizadores têm de usar para criar, atualizar e eliminar filas. Se essa ferramenta usa métodos de gestão de filas do Cloud Tasks ou queue.yamlé um detalhe de implementação da ferramentaqueue.yaml com que os utilizadores não têm de se preocupar. Se os utilizadores tiverem de usar a ferramenta, pode garantir que não existe uma mistura inadvertida de métodos de gestão de filas do Cloud Tasks e queue.yaml utilização. Para ajudar a aplicar a utilização de uma ferramenta deste tipo, pode conceder funções de administrador da fila à ferramenta e exigir que os utilizadores se autentiquem para a utilizar. Para saber mais sobre a gestão de acessos, consulte o artigo Configuração segura da fila.

Depuração

Pode inspecionar os registos de auditoria da atividade do administrador do seu projeto para obter o histórico de alterações à configuração da fila, incluindo criações, atualizações e eliminações de filas:

    gcloud logging read \
      'protoPayload.methodName=
       (com.google.appengine.legacy.queue_created OR
        com.google.appengine.legacy.queue_updated OR
        google.cloud.tasks.v2.CloudTasks.CreateQueue OR
        google.cloud.tasks.v2.CloudTasks.UpdateQueue OR
        google.cloud.tasks.v2.CloudTasks.DeleteQueue)'

Por exemplo, se uma fila existente for desativada através de um carregamento queue.yaml, é apresentada uma mensagem "Fila '[QUEUE_NAME]' desativada" no registo de auditoria através do método com.google.appengine.legacy.queue_updated.

Como retomar uma fila desativada por um carregamento do queue.yaml

Se misturar queue.yaml com métodos de gestão de filas do Cloud Tasks, o carregamento de um ficheiro queue.yaml pode desativar acidentalmente uma fila criada através da API Cloud Tasks.

Para retomar a fila, pode chamar ResumeQueue na fila ou adicioná-lo a queue.yaml e carregá-lo. Tenha em atenção que, se tiver definido anteriormente um processamento rate na configuração da fila queue.yaml, a fila é reposta para o valor predefinido rate.ResumeQueue Isto reflete-se no campo maxDispatchesPerSecond da resposta a ResumeQueue.

Quotas

Se usar o queue.yaml para criar as suas filas, pode criar, por predefinição, um máximo de 100 filas. As filas criadas com a API Cloud Tasks têm um máximo predefinido de 1000 filas. Tal como noutros casos, a combinação de métodos da API Google Cloud Tasks e da API Google Ads pode produzir resultados inesperados.queue.yaml Por exemplo, suponha que cria algumas filas com queue.yaml e, em seguida, recebe um aumento da quota para, por exemplo,2000. Se, posteriormente, usar o método da API Cloud Tasks para criar mais filas, recebe erros de falta de quota. Para corrigir esta situação, apresente um pedido através da opção Editar quotas na página Quotas da consolaGoogle Cloud .

Informações adicionais sobre os métodos de gestão de filas do Cloud Tasks

Configuração da fila e atraso no arranque da fila

As alterações à configuração da fila podem demorar vários minutos a entrar em vigor. Por exemplo, depois de ligar para CreateQueue ou UpdateQueue, podem passar vários minutos antes de poder ligar com êxito para CreateTask nessa fila.

Cloud Tasks e a fila do App Enginedefault

A fila do App Engine denominada "default" recebe um tratamento especial no SDK do App Engine e na API Cloud Tasks.

Se a fila default ainda não existir, é criada nas seguintes situações:

  1. Quando uma tarefa é adicionada pela primeira vez à fila defaultatravés do SDK do App Engine.
  2. Quando é carregado um ficheiro queue.yaml que especifica uma fila default.
  3. Quando CreateQueue ou UpdateQueue é chamado para criar a fila default.

Para preservar a compatibilidade com o App Engine, o Cloud Tasks aplica as seguintes restrições:

  1. Se for criada uma fila com o nome "default", tem de ser uma fila que use tarefas do App Engine.
  2. Depois de criada, os utilizadores não podem eliminar a fila default.

Na API Cloud Tasks, o seguinte também se aplica à fila default:

  1. A API Cloud Tasks não cria automaticamente a fila default nem outras filas.
  2. Tal como qualquer outra fila, chamar GetQueue na fila default resulta num erro de não encontrado se a chamada for feita antes da criação da fila.
  3. Da mesma forma, a fila default não aparece no resultado de ListQueues antes de ser criada.
  4. A configuração da fila default pode ser alterada com a chamada UpdateQueue.

O que se segue?