2013-09-18 3 views
0

Я использую DefaultMessageListenerContainer для настройки адаптера message-driven-channel-adapter для чтения сообщения из очереди, обработки его и отправки его в другую очередь с использованием исходящего канала-адаптера. Если я столкнулся с каким-либо исключением (например, javax.jms.JMSException: Message превысил максимальный размер), отправляя сообщение в исходящую очередь, я хочу обработать его в errorHandler (свойство DefaultMessageListenerContainer) и уведомить получателя.Как получить сообщение (полезную нагрузку) в Spring Integration ErrorHandler?

Я могу получить трассировку стека исключений в errorHandler, но я не уверен, какое сообщение вызвало это исключение. Есть ли способ получить сообщение/полезную нагрузку, вызвавшую исключение в errorHandler?

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

Спасибо! Гуру

ответ

2

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(); 
      } 
     } 
    ... 
} 
Смежные вопросы