Mule ESB - Bloqueio de estratégia de exceção de captura e carga útil

A documentação do Mule afirma que a estratégia de captura-exceção é semelhante ao bloco de captura java. Infelizmente, porém, a carga útil é consumida (a mensagem é consumida); do bloco catch, a carga é perdida (diferente do método java, no qual você pode acessar os parâmetros de entrada do método a partir de um bloco catch / finalmente).

O problema desse design é que, em qualquer instância (do fluxo da estratégia de captura), é impossível saber o erro e a última carga útil enriquecida conhecida que foi usada (o que causou o erro?). Isso complica a auditoria de dados que causaram o erro.

Suponha que, se houver um fluxo com 10 processadores de mensagens, seja entediante identificar o processador de mensagens que gerou erro.

Eu posso ver duas soluções alternativas relacionadas à carga útil:
1) Após o terminal de entrada, envie a carga útil para uma variável de fluxo antes de cada processador de mensagens (outra desvantagem é o que acontece com as propriedades e os anexos de entrada?)
2) Use a estratégia de exceção de reversão com zero tentativas (a transação será revertida) e a mensagem de entrada original pode estar disponível. (desvantagem: é difícil examinar por que o erro ocorreu e em qual processador de mensagens - exemplo: eu posso ter 5 ou 6 processadores de banco de dados)

A razão pela qual isso se torna importante é oferecer suporte a um aplicativo ESB em produção.

Por exemplo, no bloco de captura, se conseguirmos canalizar a carga útil e os detalhes da exceção (vinculados a um único UID), você poderá executar uma ferramenta de monitor de log, enviá-la para um painel em tempo real para monitorar a finalidade / aumentar alertas. A mesma abordagem pode ser aplicada uniformemente a todos os aplicativos / fluxos e componentes java, etc.

O MMC é fraco nesta área - por exemplo, se você deseja suprimir alertas de um trabalho em lotes após 5 ocorrências, o MMC não pode fazê-lo.

Minhas perguntas são: 1) Existe alguma razão para a indisponibilidade da carga útil? A solução possível é enviar (os últimos dados conhecidos) para outra variável como parte da mensagem chamada originalPayload ou originalInboundProperties? 2) Qualquer outra maneira direta de canalizar a exceção e a carga útil para um solicitante (em vez de soluções alternativas)?

Ananth Krishnan (WHISHWORKS.com)

questionAnswers(0)

yourAnswerToTheQuestion