Timeout no conector Pipeline Executor
Saiba por que uma chamada síncrona do conector Pipeline Executor pode sofrer timeout mesmo quando o pipeline chamado é executado com sucesso, e como corrigir isso.
Por que o timeout ocorre?
Em uma chamada síncrona do conector Pipeline Executor, o pipeline de origem espera o pipeline de destino concluir e retornar uma resposta antes de continuar.
O valor de Timeout não mede apenas quanto tempo o pipeline de destino leva para processar a mensagem. Ele mede todo o ciclo:
O pipeline de origem envia a mensagem.
A mensagem espera na fila do pipeline de destino.
O pipeline de destino processa a mensagem.
A resposta volta para a fila do pipeline de origem.
O pipeline de origem recebe a resposta e continua.
O tempo de fila conta para o timeout nos dois sentidos. Quando o pipeline de destino recebe um alto volume de execuções, as mensagens esperam mais tempo na fila, e a resposta pode levar mais tempo para chegar ao pipeline de origem do que o timeout configurado permite, mesmo que o próprio pipeline de destino termine o processamento a tempo. Quando isso acontece, o pipeline de destino retorna um erro de timeout para o pipeline de origem.
Isso geralmente acontece quando o número de chamadas excede a capacidade de processamento do pipeline de destino, e resulta em um erro como este:
The message could not be sent to the specified pipeline. Error org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 20000 millis due reply message with correlationID: Camel-…-… not received on destination: amq.gen-…. Exchange[…-…]Causas comuns
Verifique se os seus pipelines se encaixam em um destes cenários:
O pipeline de origem é implantado com mais execuções concorrentes do que o pipeline de destino.
O pipeline de origem consegue enviar mais requisições do que o pipeline de destino consegue processar, então as requisições ficam em fila no lado do destino.
O pipeline de destino é acionado por múltiplos fluxos ao mesmo tempo.
As requisições combinadas excedem as execuções concorrentes permitidas na implantação do pipeline de destino.
Cada tipo de implantação (deploy) permite um número máximo diferente de execuções concorrentes:
Small
10
Medium
20
Large
40
Uma incompatibilidade entre o tipo de implantação do pipeline de origem e do pipeline de destino é uma causa comum desse erro. Fique atento a combinações como estas:
Medium
Small
Large
Medium
Large
Small
Solução
Aplique uma destas correções:
Aumente o número de execuções concorrentes do pipeline de destino para que ele consiga lidar com mais requisições. Isso pode exigir o aumento do número de réplicas.
Se a operação puder ser assíncrona, altere-a para ASYNC, ou use uma chamada baseada em eventos para que o gerenciador de filas controle o tráfego para o pipeline de destino.
Para saber mais sobre como o timeout do Pipeline Executor funciona, leia Pipeline Executor.
Atualizado
Isto foi útil?