Pode configurar a fila do Cloud Tasks quando a cria ou em qualquer altura posteriormente. A configuração é aplicada a todas as tarefas nessa fila.
Existem três aspetos básicos para configurar as suas filas:
Configure o encaminhamento ao nível da fila
A configuração do encaminhamento ao nível da fila substitui o encaminhamento definido ao nível da tarefa. Isto é útil se quiser usar o Cloud Tasks como um buffer antes do serviço de destino ou se precisar de alterar o encaminhamento de todas as tarefas numa fila.
O encaminhamento ao nível da fila aplica-se a:
- Tarefas que estão na fila
- Tarefas adicionadas à fila depois de a encaminhamento ao nível da fila ter sido definido
Limitações
O encaminhamento ao nível da fila não é compatível com chaves de encriptação geridas pelo cliente (CMEK) do Cloud Key Management Service (Cloud KMS). Se as CMEK estiverem ativadas, não pode fazer o seguinte:
- Crie tarefas numa fila com encaminhamento ao nível da fila
- Aplique o encaminhamento ao nível da fila
Configure o encaminhamento ao nível da fila para tarefas HTTP
Pode configurar uma fila para substituir o encaminhamento ao nível da tarefa quando cria a fila ou quando a atualiza. Para configurar o encaminhamento ao nível da fila, defina o parâmetro uriOverride da fila para o seu caminho preferencial.
Se estiver a aplicar o encaminhamento ao nível da fila como uma atualização a uma fila existente, pause a fila antes de aplicar as alterações e aguarde um minuto após a aplicação das alterações para retomar a fila.
Pausar a fila executando o seguinte comando:
gcloud tasks queues pause QUEUE_ID
Substitua
QUEUE_IDpelo ID da sua fila.Atualize ou remova o encaminhamento ao nível da fila.
Para atualizar o encaminhamento ao nível da fila, defina o parâmetro
uriOverridepara o seu percurso atualizado.Para remover o encaminhamento ao nível da fila através da API REST ou RPC:
API REST: envie um pedido
patchpara a fila com um payload vazio e o parâmetroupdateMaskdefinido comohttpTarget.API RPC: envie um
updateQueueRequestpara a fila com um payload vazio e o parâmetroupdate_maskdefinido comohttp_target.
O exemplo seguinte usa a API REST para atualizar o anfitrião para o qual as tarefas são encaminhadas:
curl -X PATCH -d @- -i \ -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID?updateMask=httpTarget.uriOverride" << EOF { "httpTarget": {"uriOverride":{"host":"NEW_HOST"}} } EOFSubstitua o seguinte:
ACCESS_TOKEN: a sua chave de acesso. Pode obter este valor executando o seguinte no seu terminal:gcloud auth application-default login gcloud auth application-default print-access-token
PROJECT_ID: o ID do seu projeto Google Cloud . Pode obter esta informação executando o seguinte no terminal:gcloud config get-value project
LOCATION: a localização da sua fila.NEW_HOST: o novo anfitrião para o qual quer encaminhar a fila.
Aguarde um minuto.
A nova configuração pode demorar até um minuto a entrar em vigor. Aguardar para retomar a fila ajuda a evitar o envio de tarefas com a configuração antiga.
Execute o seguinte comando para retomar a fila:
gcloud tasks queues resume QUEUE_ID
Configure o encaminhamento ao nível da fila para tarefas do App Engine
Para configurar o encaminhamento ao nível da fila para tarefas do App Engine, defina o parâmetro appEngineRoutingOverride da fila para o serviço e a versão do App Engine preferidos.
Configurar o encaminhamento ao nível da fila e substituir qualquer encaminhamento ao nível da tarefa:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE,version:VERSION
Substitua o seguinte:
QUEUE_ID: o ID da fila (o nome abreviado).SERVICE: o serviço de trabalho do App Engine responsável pelo processamento de tarefas.VERSION: a versão da app.
Por exemplo, se configurar um serviço de trabalhadores para processar todas as tarefas numa fila, pode encaminhar para esse serviço e para a versão predefinida:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE
Valide se a fila foi configurada com êxito executando o seguinte comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Substitua
LOCATIONpela localização da fila.O resultado deve ser semelhante ao seguinte:
appEngineRoutingOverride: host: SERVICE.PROJECT_ID.appspot.com service: SERVICE name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: 1000 maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Para remover o encaminhamento ao nível da fila, execute o seguinte comando:
gcloud tasks queues update QUEUE_ID \ --clear-routing-override
Quando o encaminhamento ao nível da fila é removido, o encaminhamento ao nível da tarefa é aplicado às tarefas na fila e às tarefas adicionadas à fila no futuro.
Defina limites de taxas
O limite de velocidade determina a velocidade máxima à qual as tarefas podem ser enviadas por uma fila, independentemente de o envio ser uma primeira tentativa de tarefa ou uma nova tentativa.
Defina a taxa máxima e o número de tarefas simultâneas que podem ser enviadas por uma fila executando o seguinte comando:
gcloud tasks queues update QUEUE_ID \ --max-dispatches-per-second=DISPATCH_RATE \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Substitua o seguinte:
QUEUE_ID: o ID da fila (o nome abreviado).DISPATCH_RATE: a taxa de expedição. Esta é a taxa à qual os tokens no depósito são atualizados. Em condições em que existe um fluxo relativamente constante de tarefas, esta é a taxa equivalente à qual as tarefas são enviadas.MAX_CONCURRENT_DISPATCHES: o número máximo de tarefas na fila que podem ser executadas em simultâneo.
Por exemplo, se criou uma fila sem definir parâmetros, pode atualizar o número máximo de tarefas simultâneas executando o seguinte comando:
gcloud tasks queues update QUEUE_ID \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Valide se a fila foi configurada com êxito executando o seguinte comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Substitua
LOCATIONpela localização da fila.O resultado deve ser semelhante ao seguinte:
name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: MAX_CONCURRENT_DISPATCHES maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Métodos para definir taxas de processamento de filas
Pode definir as taxas de processamento de filas através da API Cloud Tasks ou carregando um ficheiro queue.yaml. Ambos os métodos resultam em filas que usam o mesmo mecanismo subjacente.
Em ambos os casos, a fila usa o algoritmo de token bucket para controlar a taxa de execução de tarefas. Cada fila nomeada tem um contentor que contém os respetivos tokens.
Sempre que a sua aplicação executa uma tarefa, é removido um token do depósito.
A fila continua a processar tarefas até que o respetivo conjunto fique sem tokens. O sistema repõe continuamente o contentor com novos tokens com base na taxa max_dispatches_per_second que especificar para a fila. Se a fila contiver tarefas a processar e o contentor da fila contiver tokens, o sistema processa simultaneamente tantas tarefas quantos tokens existirem, até ao valor max_concurrent_dispatches que definiu.
Uma carga desigual pode permitir que o número de tokens no contentor aumente significativamente, o que pode levar a picos de processamento quando ocorre um pico de pedidos. Neste caso, a sua fila pode registar uma taxa de envio real que excede a sua taxa de max_dispatches_per_second, consumindo recursos do sistema e competindo com pedidos de publicação para utilizadores. Nos casos em que usa filas para gerir as taxas de envio com base em SLAs relativamente lentos para serviços a jusante, isto pode originar erros como HTTP 429 (Demasiados pedidos) ou HTTP 503 (Serviço indisponível).
Quando usa qualquer método da API Cloud Tasks, tem dois campos para definir a taxa de envio da fila:
max_dispatches_per_secondmax_concurrent_dispatches
Um terceiro campo,
max_burst_size, é calculado pelo sistema com base no valor que define paramax_dispatches_per_second. Para mais informações, consulte o artigo MensagensRateLimits.Quando usa o método
queue.yaml, pode definir todos os três elementos:max_concurrent_requests, que é equivalente amax_concurrent_dispatchesrate, que é equivalente amax_dispatches_per_secondbucket_size, que é equivalente amax_burst_size
Na maioria dos casos, usar o método da API Cloud Tasks e permitir que o sistema defina
max_burst_size produz uma taxa muito eficiente para gerir picos de pedidos. No entanto, em alguns casos, particularmente quando a taxa necessária é relativamente lenta, pode ter mais controlo se usar o método queue.yaml para definir manualmente bucket_size para um valor pequeno ou definir max_concurrent_dispatches para um valor pequeno através da API Cloud Tasks.
Defina os parâmetros de repetição
Se uma tarefa não for concluída com êxito, o Cloud Tasks volta a tentar a tarefa com um recuo exponencial de acordo com os parâmetros que definiu.
Especifique o número máximo de vezes para repetir tarefas com falhas na fila, defina um limite de tempo para as tentativas e controle o intervalo entre tentativas executando o seguinte comando:
gcloud tasks queues update QUEUE_ID \ --max-attempts=MAX_ATTEMPTS \ --max-retry-duration=MAX_RETRY_DURATION \ --min-backoff=MIN_INTERVAL \ --max-backoff=MAX_INTERVAL \ --max-doublings=MAX_DOUBLINGS
Substitua o seguinte:
QUEUE_ID: o ID da fila (o nome abreviado).MAX_ATTEMPTS: o número máximo de tentativas para uma tarefa, incluindo a primeira tentativa. Pode permitir novas tentativas ilimitadas definindo esta flag como-1. Tenha em atenção que, seMAX_ATTEMPTSestiver definido como-1,MAX_RETRY_DURATIONcontinua a ser aplicado.MAX_RETRY_DURATION: o período máximo para tentar novamente uma tarefa com falha, medido a partir do momento em que a tarefa foi tentada pela primeira vez. O valor tem de ser uma string que termine em "s", como5s. Se estiver definido como0, a idade da tarefa é ilimitada. Tenha em atenção que, seMAX_RETRY_DURATIONestiver definido como0,MAX_ATTEMPTScontinua a ser aplicado.
MIN_INTERVAL: o tempo mínimo de espera entre tentativas. O valor tem de ser uma string que termine em "s", como5s.MAX_INTERVAL: o tempo máximo de espera entre tentativas de repetição. O valor tem de ser uma string que termine em "s", como5s.MAX_DOUBLINGS: o número máximo de vezes que o intervalo entre as novas tentativas de tarefas com falhas é duplicado antes de o aumento se tornar constante. O intervalo de repetição de uma tarefa começa emMIN_INTERVAL, depois duplicaMAX_DOUBLINGSvezes, aumenta linearmente e, finalmente, repete-se em intervalos deMAX_INTERVALatéMAX_ATTEMPTSvezes.Por exemplo, se
MIN_INTERVALfor10s,MAX_INTERVALfor300seMAX_DOUBLINGSfor3, o intervalo de repetição vai duplicar3vezes, aumentar linearmente 2^3 * 10 s e, em seguida, repetir nos intervalos deMAX_INTERVALaté que a tarefa tenha sido tentadaMAX_ATTEMPTSvezes: 10 s, 20 s, 40 s, 80 s, 160 s, 240 s, 300 s, 300 s e assim sucessivamente.
Para mais detalhes sobre os parâmetros, consulte as definições de
RetryConfigdo recursoQueue.Valide se a fila foi configurada com êxito executando o seguinte comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Substitua
LOCATIONpela localização da fila.O resultado deve conter os parâmetros de repetição que definiu.
O que se segue?
- Saiba como criar tarefas de destino HTTP.
- Saiba como criar tarefas do App Engine.
- Saiba mais sobre a gestão de filas na referência da API RPC.
- Saiba mais sobre a gestão de filas na referência da API REST.