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_ID
pelo 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
uriOverride
para 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
patch
para a fila com um payload vazio e o parâmetroupdateMask
definido comohttpTarget
.API RPC: envie um
updateQueueRequest
para a fila com um payload vazio e o parâmetroupdate_mask
definido 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"}} } EOF
Substitua 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
LOCATION
pela 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
LOCATION
pela 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_second
max_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_dispatches
rate
, que é equivalente amax_dispatches_per_second
bucket_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_ATTEMPTS
estiver definido como-1
,MAX_RETRY_DURATION
continua 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_DURATION
estiver definido como0
,MAX_ATTEMPTS
continua 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_DOUBLINGS
vezes, aumenta linearmente e, finalmente, repete-se em intervalos deMAX_INTERVAL
atéMAX_ATTEMPTS
vezes.Por exemplo, se
MIN_INTERVAL
for10s
,MAX_INTERVAL
for300s
eMAX_DOUBLINGS
for3
, o intervalo de repetição vai duplicar3
vezes, aumentar linearmente 2^3 * 10 s e, em seguida, repetir nos intervalos deMAX_INTERVAL
até que a tarefa tenha sido tentadaMAX_ATTEMPTS
vezes: 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
RetryConfig
do recursoQueue
.Valide se a fila foi configurada com êxito executando o seguinte comando:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Substitua
LOCATION
pela 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.