Introdução
Neste post do blog, nosso objetivo é explicar sobre o erro "Tempo de espera síncrono excedido" no SAP Process Integration/SAP Process Orchestration e fornecer algumas dicas de resolução de problemas que ajudarão a entender melhor onde está exatamente o problema e como evitá-lo/prevenir no futuro.
Sistema de Mensagens
Para entender melhor este post do blog, é esperado que você tenha algum conhecimento sobre como o Sistema de Mensagens funciona. Recomenda-se ler o post do blog
Ajustando as filas do Sistema de Mensagens PI/PO
, que fornece uma boa visão geral sobre o assunto.
Tempo de espera síncrono excedido
Cada mensagem síncrona processada por um sistema SAP Process Integration/SAP Process Orchestration tem um tempo de espera interno. Isso é para garantir que siga o padrão síncrono e deve ser processado dentro desse tempo. Portanto, uma vez que uma mensagem é criada, ela tem esse tempo exato para concluir seu processamento, não importa em que ponto esteja. Se não concluir seu processamento e não retornar uma resposta ao sistema emissor, então o sistema gerará o erro "Tempo de espera síncrono excedido".
Isso geralmente está acompanhado do erro MessageExpiredException também.
Como é definido o tempo de espera da mensagem?
Este tempo de espera é definido quando a mensagem é criada dentro do sistema SAP Process Integration/SAP Process Orchestration. Isso ocorre no Canal de Comunicação do Emissor. Se houver um parâmetro de tempo de espera definido no Canal de Comunicação, então esse parâmetro será considerado para o tempo de espera interno da mensagem (por exemplo, o parâmetro "syncTimeout" para o módulo "CallSapAdapter" em um Canal de Comunicação do Emissor SOAP).
Se nenhum parâmetro específico for definido no Canal de Comunicação, então o tempo de espera padrão do sistema será utilizado. Para sistemas AEX (apenas Java), é definido pelo parâmetro "
xiadapter.outbound.timeout.default
" dentro do Serviço "XPI Adapter: XI".
Por que ocorreria um tempo de espera da mensagem?
Se você ver o erro "Tempo de espera síncrono excedido" em seu sistema, isso significa que a mensagem não pôde concluir seu processamento dentro do tempo de espera definido. Isso geralmente ocorre por causa das seguintes razões:
-
O sistema receptor leva mais tempo para processar a solicitação do que o valor de tempo de espera configurado. Portanto, uma vez que a mensagem é enviada ao sistema receptor, ela leva muito tempo para enviar uma resposta de volta ao PI/PO, o que impede o PI/PO de enviar uma resposta de volta ao sistema emissor, e assim o tempo de espera da mensagem é ativado e a mensagem falha.
-
Isso geralmente ocorre no caso de haver algum problema de desempenho no sistema receptor, ou o sistema receptor precisar realizar muitas atividades assim que a solicitação é recebida, o que se espera que leve um tempo prolongado (por exemplo, executar um programa Z que recupera e manipula muitos dados)
-
Há uma carga alta de mensagens no sistema e não há recursos suficientes (threads de adaptador) disponíveis para processar todas as mensagens de uma vez. Portanto, as novas mensagens devem esperar que os threads de adaptador estejam livres, e em alguns casos, essa espera pode ser tão longa quanto o tempo de espera da mensagem, e assim o tempo de espera da mensagem é ativado e a mensagem falha.
Geralmente, o problema 1) também leva ao problema 2), já que os threads de adaptador estão todos ocupados esperando a resposta do sistema receptor, e assim as novas mensagens nunca podem obter um thread de adaptador livre (e se conseguirem, também estarão esperando uma resposta do sistema receptor). Isso é como uma bola de neve e pode ocorrer para um cenário ou todos os cenários que compartilham o mesmo thread de adaptador.
Resolução de Problemas
Para lhe fornecer algumas dicas de resolução de problemas, criei um cenário de integração em meu sistema SAP Process Integration onde consigo reproduzir o erro "Tempo de espera síncrono excedido".
O cenário é:
-
Postman -> Emissor SOAP -> PI (Mapeamento de Mensagens) -> Receptor REST ->