Introducción
En esta publicación del blog, nuestro objetivo es explicar sobre el error "Tiempo de espera sincrónico excedido" en SAP Process Integration/SAP Process Orchestration y proporcionar algunos consejos de solución de problemas que ayudarán a comprender mejor dónde está exactamente el problema y cómo evitarlo/prevenirlo en el futuro.
Sistema de Mensajería
Para comprender mejor esta publicación del blog, se espera que tenga algún tipo de conocimiento sobre cómo funciona el Sistema de Mensajería. Se recomienda leer la publicación del blog
Ajuste de las colas del Sistema de Mensajería PI/PO
, que proporciona una buena visión general al respecto.
Tiempo de espera sincrónico excedido
Cada mensaje sincrónico que es procesado por un sistema SAP Process Integration/SAP Process Orchestration tiene un tiempo de espera interno. Esto es para garantizar que siga el patrón sincrónico y que debe ser procesado dentro de este tiempo. Por lo tanto, una vez que se crea un mensaje, tiene este tiempo exacto para completar su procesamiento, sin importar en qué punto se encuentre. Si no completa su procesamiento y no devuelve una respuesta al sistema emisor, entonces el sistema generará el error "Tiempo de espera sincrónico excedido".
Esto suele ir acompañado del error MessageExpiredException también.
¿Cómo se define el tiempo de espera del mensaje?
Este tiempo de espera se define una vez que se crea el mensaje dentro del sistema SAP Process Integration/SAP Process Orchestration. Esto ocurre en el Canal de Comunicación del Emisor. Si hay un parámetro de tiempo de espera establecido en el Canal de Comunicación, entonces este parámetro será considerado para el tiempo de espera interno del mensaje (por ejemplo, el parámetro "syncTimeout" para el módulo "CallSapAdapter" en un Canal de Comunicación de Emisor SOAP).
Si no se define un parámetro específico en el Canal de Comunicación, entonces se utilizará el tiempo de espera predeterminado del sistema. Para sistemas AEX (solo Java), está definido por el parámetro "
xiadapter.outbound.timeout.default
" dentro del Servicio "XPI Adapter: XI".
¿Por qué se produciría un tiempo de espera del mensaje?
Si ves el error "Tiempo de espera sincrónico excedido" en tu sistema, esto significa que el mensaje no pudo completar su procesamiento dentro del tiempo de espera definido. Esto suele ocurrir debido a las siguientes razones:
-
El sistema receptor tarda más tiempo en procesar la solicitud que el valor de tiempo de espera configurado. Por lo tanto, una vez que el mensaje se envía al sistema receptor, tarda demasiado tiempo en enviar una respuesta de vuelta a PI/PO, lo que impide que PI/PO envíe una respuesta de vuelta al sistema emisor, y por lo tanto se activa el tiempo de espera del mensaje y el mensaje falla.
-
Esto suele ocurrir en caso de que haya algún problema de rendimiento en el sistema receptor, o el sistema receptor tenga que realizar muchas actividades una vez que se recibe la solicitud, lo que se espera que tome un tiempo prolongado (por ejemplo, ejecutar un programa Z que recupera y maneja muchos datos)
-
Hay una alta carga de mensajes en el sistema y no hay suficientes recursos (hilos de adaptador) disponibles para procesar todos los mensajes a la vez. Por lo tanto, los nuevos mensajes deben esperar a que los hilos de adaptador estén libres, y en algunos casos, esta espera puede ser tan larga como el tiempo de espera del mensaje, y por lo tanto se activa el tiempo de espera del mensaje y el mensaje falla.
Por lo general, el problema 1) también conduce al problema 2), ya que los hilos de adaptador están todos ocupados esperando la respuesta del sistema receptor, y por lo tanto los nuevos mensajes nunca pueden obtener un hilo de adaptador libre (y si lo hacen también estarán esperando una respuesta del sistema receptor). Esto es como una bola de nieve y puede ocurrir para un escenario o todos los escenarios que comparten el mismo hilo de adaptador.
Solución de problemas
Para mostrarle algunos consejos de solución de problemas, he creado un escenario de integración en mi sistema de SAP Process Integration donde puedo reproducir el error "Tiempo de espera sincrónico excedido".
El escenario es:
-
Postman -> Emisor SOAP -> PI (Mapeo de Mensajes) -> Receptor REST ->