Java Spring DefaultMessageListenerContainer、ActiveMQ和消息重新传递
如果使用of接收JMS消息,则不会重新传递JMS消息,即使我将Java Spring DefaultMessageListenerContainer、ActiveMQ和消息重新传递,java,spring,exception-handling,jms,activemq,Java,Spring,Exception Handling,Jms,Activemq,如果使用of接收JMS消息,则不会重新传递JMS消息,即使我将sessionackknowledgemode设置为2 如果在我的JavaBean的onMessage()中出现RuntimeException,则消息在JMS提供程序()中未被确认,它在队列中保持为挂起状态。但它从未被重新交付,我认为这是因为Spring从未调用session.recover(),根据需要,这是重新交付所必需的 有人能告诉我如何配置DefaultMessageListenerContainer以在出现运行时异常时调用
sessionackknowledgemode
设置为2
如果在我的JavaBean的onMessage()
中出现RuntimeException
,则消息在JMS提供程序()中未被确认,它在队列中保持为挂起状态。但它从未被重新交付,我认为这是因为Spring从未调用session.recover()
,根据需要,这是重新交付所必需的
有人能告诉我如何配置DefaultMessageListenerContainer
以在出现运行时异常时调用session.recover()
致以最诚挚的问候,Martin您表示正在使用sessionAcknowledgeMode 2,即Session.CLIENT\u ACKNOWLEDGE。以下声明直接摘自:
- “客户端确认”:侦听器成功执行后自动确认消息;在引发异常的情况下不重新交付
我从未遇到过向应用程序添加特定于Spring的代码的问题,因为它可以在任何地方运行。当我开始使用弹簧时,这对我很重要。它并不特定于任何单个应用程序服务器或servlet容器,因此,如果我将com.ibm或com.oracle导入到源代码中,我就不会像在Spring中那样将自己编码到一个角落。事实上,我在一个MOM中使用了Spring JMS API,并在不更改JMS连接工厂定义的情况下切换到了另一个MOM。谢谢,我知道这个可能的解决方案(抱歉,我没有写这个),但它将锅炉板代码添加到我使用的每个bean中,并强制我使用
SessionAwareMessageListener
(这是一个Spring依赖项)与javax.jms.MessageListener不同,老实说,我不想直接在消息处理器中引入Spring依赖项。我有一个类似的问题。SessionAwareListener会抛出一个意外的运行时异常,但DMLC会在停止之前重试消息大约32次。不确定如何设置重试数字。。。?