Mule ESB: bloque de estrategia de excepción de captura y carga útil

La documentación de la mula establece que la estrategia de excepción de captura es similar al bloque de captura de Java. Pero desafortunadamente, la carga útil se consume (se consume el mensaje); desde el bloque catch se pierde la carga útil (a diferencia de un método java en el que puede acceder a los parámetros de entrada del método desde un bloque catch / finally).

El problema con este diseño es que, en cualquier caso, (desde el flujo de la estrategia de captura) es imposible conocer el error y la última carga útil enriquecida conocida que se utilizó (¿qué causó el error?). Esto complica la auditoría de los datos que causaron el error.

Supongamos que si hay un flujo con 10 procesadores de mensajes, resulta tedioso identificar el procesador de mensajes que arrojó el error.

Puedo ver 2 soluciones alternativas con respecto a la carga útil:
1) Después del punto final de entrada, empuje la carga útil a una variable de flujo antes de cada procesador de mensajes (una vez más, otra desventaja es lo que sucede con las propiedades y los archivos adjuntos de entrada)
2) Utilice la estrategia de excepción Rollback con cero intentos (la transacción se revertirá), y el mensaje de entrada original puede estar disponible. (inconveniente: es difícil hacer una introspección sobre por qué sucedió el error y en qué procesador de mensajes - ejemplo: puedo tener 5 o 6 procesadores DB)

La razón por la que esto se vuelve importante es que es más fácil soportar una aplicación ESB en producción.

Por ejemplo, desde el bloque de captura si podemos canalizar la carga útil y los detalles de excepción (vinculados a un único UID), puede ejecutar una herramienta de monitor de registro, empujarla a un tablero en tiempo real para monitorear el propósito / elevar Alertas. El mismo enfoque se puede aplicar de manera uniforme a todas las aplicaciones / flujos y componentes de Java, etc.

MMC es débil en esta área; por ejemplo, si desea suprimir las Alertas de un trabajo por lotes después de 5 incidentes, MMC no puede hacerlo.

Mis preguntas son: 1) ¿Hay alguna razón por la cual la carga útil no está disponible? La posible solución es empujar (último dato conocido) a otra variable como parte del mensaje llamado originalPayload u originalInboundProperties? 2) ¿Alguna otra forma directa de canalizar la excepción y la carga útil a un apéndice (en lugar de soluciones alternativas)?

Ananth Krishnan (WHISHWORKS.com)

Respuestas a la pregunta(0)

Su respuesta a la pregunta