Usar queue.yaml para gerenciar filas

Embora seja possível usar um queue.yaml arquivo para gerenciar filas, a combinação de métodos de gerenciamento de filas pode causar resultados inesperados. Este guia explica os riscos de combinar esses métodos e mostra como resolver problemas comuns de configuração.

A API Cloud Tasks fornece uma interface independente para o serviço de fila de tarefas do App Engine. Usando essa interface, é possível gerenciar filas pelo Google Cloud console ou pela Google Cloud CLI. As filas criadas com a API Cloud Tasks são acessíveis pelo SDK do App Engine, uma coleção de APIs específicas da plataforma, ferramentas independentes e arquivos de ambiente de execução. As filas criadas com o SDK do App Engine são acessíveis pela API Cloud Tasks.

Para manter a compatibilidade, é possível usar queue.yaml, o arquivo de configuração do SDK do App Engine, para criar e configurar filas para a API Cloud Tasks. No entanto, o gerenciamento de filas usando esse arquivo e a API Cloud Tasks pode causar problemas detalhados neste guia.

Antes de começar

Se você for novo no Cloud Tasks ou no App Engine, use a API Cloud Tasks exclusivamente para gerenciar suas filas e evite usar queue.yaml. Os métodos de gerenciamento de filas do Cloud Tasks oferecem mais opções para criar, atualizar e excluir filas.

Se você já usa queue.yaml, considere mudar para os métodos de gerenciamento de filas do Cloud Tasks apenas se entender os riscos de combinar métodos de gerenciamento de filas.

Impor um método de gerenciamento de filas

Para evitar a combinação de métodos de gerenciamento de filas, é possível criar um app da Web ou uma ferramenta de linha de comando para criar, atualizar e excluir filas. Se essa ferramenta usa métodos de gerenciamento de filas do Cloud Tasks ou queue.yaml é um detalhe de implementação que os usuários não precisam conhecer. Ao impor o uso da ferramenta, é possível garantir que não haja mistura inadvertida de métodos. Conceda o papel do Identity and Access Management (IAM) de administrador de filas do Cloud Tasks à ferramenta e exija que os usuários façam a autenticação. Para mais informações sobre o gerenciamento de acesso, consulte Configurar filas seguras.

Atrasos na configuração de filas

As mudanças na configuração de filas podem levar vários minutos. Por exemplo, depois de chamar CreateQueue ou UpdateQueue, vários minutos podem passar antes que você possa chamar CreateTask nessa fila.

Fila default do App Engine

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

Quando a fila default é criada?

Se a fila default não existir, ela será criada nestas situações:

  • Quando uma tarefa é adicionada pela primeira vez à fila default usando o SDK do App Engine
  • Quando um arquivo queue.yaml que especifica uma fila default é enviado
  • Quando CreateQueue ou UpdateQueue é chamado para criar a fila default
Quais restrições o Cloud Tasks impõe?

Para preservar a compatibilidade com o App Engine, o Cloud Tasks impõe estas restrições em relação à default fila:

  • A API Cloud Tasks não cria automaticamente a default fila ou qualquer outra fila
  • Se uma fila chamada default é criada, ela precisa ser uma fila do App Engine
  • Chamar GetQueue na fila default retorna um erro not found se a fila ainda não existir
  • A fila default não aparece na ListQueues saída até ser criada
  • É possível modificar a configuração da fila default usando a UpdateQueue chamada
  • Depois de criada, não é possível excluir a fila default

Riscos de combinar métodos de gerenciamento de filas

Para o serviço subjacente, os arquivos queue.yaml são definitivos. O upload de um arquivo queue.yaml que omite filas atuais do projeto, independente da forma como foram criadas, fará com que estas filas sejam desativadas ou pausadas. Por exemplo, se você usar a API Cloud Tasks para chamar CreateQueue ou UpdateQueue e, em seguida, fizer upload de um arquivo queue.yaml que omita essas filas, as filas serão desativadas. Em seguida, será necessário retomar as filas desativadas.

A combinação de métodos de gerenciamento de filas pode resultar em um comportamento inesperado. Por exemplo, considere os seguintes cenários:

Cenário 1

Você chama CreateQueue para criar uma fila chamada cloud-tasks-queue e, em seguida, faz upload de um arquivo queue.yaml com o conteúdo a seguir:

queue:
- name: queue-yaml-queue

Isso resulta nos seguintes estados de fila:

  • A fila chamada cloud-tasks-queue e todas as filas anteriores estão no estado DISABLED.
  • A fila chamada queue-yaml-queue está no estado RUNNING.

Cenário 2

Você usa a API Cloud Tasks para desativar uma fila, mas ela aparece mais tarde em um arquivo queue.yaml enviado. A fila é retomada.

Cenário 3

Você exclui uma fila com o método DeleteQueue e ela aparece mais tarde em um arquivo queue.yaml. O upload queue.yaml pode falhar porque os nomes de filas não podem ser reutilizados por vários dias após a exclusão.

Depurar usando registros de auditoria

Você pode inspecionar os registros de auditoria das atividades do administrador do seu projeto e recuperar um histórico das mudanças na configuração da fila, incluindo criações, atualizações, e exclusões.

Por exemplo, se um queue.yaml upload desativar uma fila atual, você poderá executar o comando a seguir para retornar uma Disabled queue QUEUE_NAME mensagem de registro pelo com.google.appengine.legacy.queue_updated método:

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)'

Para mais informações, consulte Como ler entradas de registro.

Retomar uma fila desativada por um upload de queue.yaml

Se você combinar métodos de gerenciamento de filas, fazer o upload de um arquivo queue.yaml poderá desativar acidentalmente uma fila criada por meio da API Cloud Tasks. Para retomar a fila, chame ResumeQueue na fila ou adicione-a a queue.yaml e faça o upload.

Se você já tiver definido um processamento personalizado rate na configuração queue.yaml, ResumeQueue redefinirá a fila para o padrão rate. Isso é refletido no maxDispatchesPerSecond campo da resposta a ResumeQueue.

Resolver problemas de cota

Se você usar queue.yaml para criar suas filas, seu projeto terá uma cota padrão para o número máximo de filas que podem ser criadas. As filas criadas usando a API Cloud Tasks também têm uma cota padrão. Como em outros casos, a combinação de métodos queue.yaml e da API Cloud Tasks pode produzir resultados inesperados.

Por exemplo, quando você cria filas usando queue.yaml e recebe um aumento de cota, se você usar a API Cloud Tasks para criar mais filas, poderá receber erros de cota. Para resolver isso, é possível gerenciar suas cotas usando o Google Cloud console. Para mais informações, consulte Gerenciar suas cotas usando o console.

A seguir