Pode usar o Cloud Tasks para colocar um fluxo de trabalho numa fila e executá-lo de forma assíncrona.
O Cloud Tasks oferece os seguintes controlos:
- Agende horas de entrega específicas
- Faça a gestão das taxas de fornecimento
- Configure o comportamento de repetição
- Aceda e faça a gestão de tarefas individuais numa fila
- Ative a desduplicação de tarefas
Estes controlos podem ser úteis, por exemplo, para gerir pedidos que acionam um fluxo de trabalho e que podem exceder inesperadamente os limites dos Workflows. Ao configurar uma fila do Cloud Tasks com limites de taxa e novas tentativas, pode garantir que todos esses pedidos resultam em execuções do fluxo de trabalho.
Para mais informações, consulte o artigo Compreenda o Cloud Tasks.
Tenha em conta o seguinte:
Deve basear o limite de taxa no limite dos fluxos de trabalho para pedidos de gravação da API Execution. Se for necessário, pode pedir um ajuste à maioria das quotas na Google Cloud consola. Saiba mais acerca dos ajustes de quota.
O Cloud Tasks foi concebido para fornecer uma entrega "pelo menos uma vez"; no entanto, o Workflows não garante o processamento exatamente uma vez de pedidos duplicados do Cloud Tasks.
Pode remover atrasos na execução e maximizar o débito ativando o registo de pendências de execução nos fluxos de trabalho. As execuções em atraso são executadas automaticamente assim que a quota de concorrência de execução fica disponível. Para mais informações, consulte o artigo Faça a gestão do atraso na execução.
Antes de começar
- Se ainda não tiver um fluxo de trabalho que queira colocar em fila, crie um.
-
Enable the Cloud Tasks API.
Coloque uma tarefa em fila para executar um fluxo de trabalho
Crie uma conta de serviço para que o Cloud Tasks possa fazer pedidos à API Workflows:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Substitua
SERVICE_ACCOUNT_NAME
por um nome que tenha entre 6 e 30 carateres. Pode conter carateres alfanuméricos em minúsculas e traços. Depois de criar uma conta de serviço, não pode alterar o respetivo nome.Para permitir que o principal que vai executar os comandos do Cloud Tasks tenha a capacidade de atuar como uma conta de serviço de gestão de identidade e de acesso (IAM), conceda uma função que permita ao principal representar a conta de serviço.
Conceda à nova conta de serviço a função workflows.invoker para que a conta tenha autorização para acionar o seu fluxo de trabalho:
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/workflows.invoker
Substitua o seguinte:
PROJECT_NAME
: o nome do seu Google Cloud projeto.SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que criou anteriormente.
Se ainda não tiver uma fila do Cloud Tasks, crie uma.
Crie uma tarefa que tenha como destino o ponto final HTTP do seu fluxo de trabalho, usando a conta de serviço que criou anteriormente para autenticar:
gcloud tasks create-http-task \ --queue="QUEUE_ID" \ --url="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \ --body-content="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \ --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com"
Substitua o seguinte:
QUEUE_ID
: o identificador que atribuiu à sua fila do Cloud Tasks; por exemplo,my-queue
.PROJECT_NAME
: o nome do seu Google Cloud projeto.REGION_NAME
: a região em que o fluxo de trabalho se encontra, comous-central1
.WORKFLOW_NAME
: o nome do fluxo de trabalho para o qual quer criar uma tarefa.DOUBLE_ESCAPED_JSON_STRING
: uma codificação JSON de quaisquer argumentos que esteja a transmitir. As aspas duplas na string entre aspas são interpretadas de forma literal através de barras invertidas (\). Por exemplo:--body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que criou anteriormente.
A tarefa é criada e adicionada à sua fila do Cloud Tasks. A tarefa persiste na fila até que a execução do fluxo de trabalho seja iniciada e devolve um código de estado HTTP
2xx
. Nesse momento, o Cloud Tasks considera a tarefa concluída.
O que se segue?
- Tutorial: use uma fila do Cloud Tasks para armazenar em buffer as execuções do fluxo de trabalho
- Faça a gestão de filas e tarefas
- Faça a gestão do atraso na execução
- Transmita argumentos de tempo de execução num pedido de execução