15
A
回答
16
有上AbstractMessageListenerContainer
屬性:
<bean id="listener" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="errorHandler" ref="someHandler"/>
<property name="destinationName" value="someQueue"/>
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
凡someHandler
是一個bean實現ErrorHandler
:
的默認行爲:
@Service public class SomeHandler implements ErrorHandler { @Override public void handleError(Throwable t) { log.error("Error in listener", t); } }
,根據documentation但是注意這個消息監聽器的代碼將會是在錯誤級別處記錄任何此類異常。 [...]但是,如果需要錯誤處理,則可以將任何ErrorHandler策略的實現提供給setErrorHandler(ErrorHandler)方法。
查看您的日誌,可能是已經記錄的異常?
2
沒有xml配置。我在ApplicationContext中執行了以下操作。
@Bean
JmsListenerContainerFactory<?> jmsContainerFactory(ConnectionFactory connectionFactory,
SomeHandler errorHandler) {
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setErrorHandler(errorHandler);
return factory;
}
// From Tomasz answer
@Service
public class SomeHandler implements ErrorHandler {
@Override
public void handleError(Throwable t) {
log.error("Error in listener", t);
}
}
0
萬一時使用的默認出廠:
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory,
SomeHandler errorHandler) {
DefaultJmsListenerContainerFactory factory =
new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setErrorHandler(errorHandler);
return factory;
}
1
我喜歡簡短而親切!
@Bean
JmsListenerContainerFactory<?> jmsContainerFactory(ConnectionFactory connectionFactory) {
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setErrorHandler(t -> {
log.error("Error in listener!", t);
});
return factory;
}
相關問題
- 1. WARN o.s.a.r.l.ConditionalRejectingErrorHandler - 執行Rabbit消息偵聽器失敗
- 2. JMS消息偵聽器調用程序的設置失敗,目標隊列:XYZ:沒有JTA UserTransaction可用
- 3. 如何知道哪些JMS偵聽器隊列聽消息?
- 4. JMS MockTopic消息沒有被消息監聽器拾取嗎?
- 5. 無法在偵聽器偵聽到彈簧jms中的消息後將主體中的消息取消。
- 6. 消費MQ消息:JMS偵聽VS消息驅動Bean
- 7. JMS消息監聽器設計
- 8. JMS - 消息redlivery上失敗
- 9. JMS消費者終止並且沒有收到消息
- 10. 彈簧數據redis消息偵聽器偵聽消息兩次
- 11. Perl PayPal IPN偵聽器返回「500 SSL握手失敗」消息
- 12. 如何通知JMS偵聽器'無對象'消息
- 13. JMS - 消息監聽器onMessage必須執行兩次?
- 14. JMS:偵聽OracleAQ
- 15. JMS消息選擇執行
- 16. 爲什麼open()失敗並且errno沒有設置?
- 17. 「呼叫失敗並且未執行」
- 18. Spring JMS偵聽器容器偵聽器安裝程序超時
- 19. 如何轉換JMS消息對接收的消息偵聽到的域對象
- 20. 多個集羣正在偵聽相同的JMS消息隊列
- 21. C#中的SQL消息偵聽器#
- 22. 銷燬JMS消息監聽器
- 23. IBM MQ JMS消息監聽器
- 24. 開始停止JMS消息監聽器
- 25. Spring集成DSL消息驅動的jms偵聽器使用輪詢器代替
- 26. 如何設置偵聽器?
- 27. 當偵聽器執行時刪除偵聽器
- 28. 一次偵聽一個jms隊列並只處理10條消息
- 29. 我有兩個Message Listener正在偵聽相同的消息。如何確保一個偵聽器先於另一個偵聽器執行其代碼?
- 30. 並行偵聽兔子mq中的消息
感謝您的回答。順便說一句,爲什麼使用這個bean的@Service? – user705414
看起來像使用WARN級別默認情況下記錄異常。 – user705414
@ user705414:這似乎是在文檔中的錯誤:['AbstractMessageListenerContainer.invokeErrorHandler()'](http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-jms/ 3.0.6.RELEASE/org/springframework/jms/listener/AbstractMessageListenerContainer.java#AbstractMessageListenerContainer.invokeErrorHandler(java.lang.Throwable))確實使用'log.warn()'。我使用@Service來自動檢測這個bean,當然,任何聲明錯誤處理器bean的方法都可以。 –