1

我正在使用 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
}

谢谢!大师

4

2 回答 2

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();
            }
        }
   ...
}
于 2013-09-19T19:44:25.030 回答
2

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

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

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

于 2013-09-27T21:05:25.273 回答