【问题标题】:How to get hold of the Message (payload) in Spring Integration ErrorHandler?如何在 Spring Integration ErrorHandler 中获取消息(有效负载)?
【发布时间】:2013-09-18 06:29:29
【问题描述】:

我正在使用 DefaultMessageListenerContainer 来配置消息驱动通道适配器以从队列中读取消息,对其进行处理并使用出站通道适配器将其发布到不同的队列。 如果在将消息发布到出站队列时遇到任何异常(例如 javax.jms.JMSException:消息超出最大大小),我想在 errorHandler(DefaultMessageListenerContainer 的属性)中处理它并通知接收者。

我能够在 errorHandler 中获取异常堆栈跟踪,但我不确定是哪条消息导致了该异常。有什么方法可以获取导致 errorHandler 异常的消息/有效负载?

public class MyErrorHandler implements ErrorHandler {
public void handleError(Throwable t) {
        // Get the payload???
            // Log the exception
            // Notify the receiver
}

谢谢! 大师

【问题讨论】:

    标签: spring


    【解决方案1】:

    当您定义消息驱动通道适配器时,Spring Integration 会自动将错误处理程序添加到 DefaultMessageListenerContainer。错误出现在名为“errorChannel”的通道上,您可以像对待 Spring Integration 中的任何其他消息一样对待这些错误。只需在配置中的任意位置添加一个名为“errorChannel”的通道,您就可以从那里添加组件。

    http://docs.spring.io/spring-integration/reference/htmlsingle/#namespace-errorhandler

    请记住,处理错误将成功完成任何正在进行的 JMS 事务,因此请记住在处理完错误后将其抛出,以便 JMS 事务回滚。

    【讨论】:

      【解决方案2】:

      以下代码有效

      public class MyErrorHandler implements ErrorHandler {
      
         public void handleError(Throwable t) {
      
              if (throwable instanceof MessageHandlingException) {
                  MessageHandlingException exception = (MessageHandlingException) throwable;
                  if (exception != null) {
                      Message<?> message = exception.getFailedMessage();
                      payload = (String) message.getPayload();
                  }
              }
         ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-08
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多