我知道Camel的JMS组件,用于接收消息,使用Springs DefaultMessageListenerContainer.它可以配置为使用CLIENT_ACKNOWLEDGE模式来确认消息.我的问题是,什么时候调用message.acknowledge()方法?它是由spring的监听器容器在内部调用的吗?
或者我能以某种方式在遗嘱中承认消息吗?
我想避免因为我的应用程序在处理这些消息期间崩溃并使其成为事务性而导致消息丢失的情况对我来说有点太重了
Mic*_*ski 13
好.经过一些调试和扫描源代码后,我发现Camel使用了Spring MessageListenerContainers.在CLIENT_AKNOWLEDGE模式的情况下,AbstractMessageListenerContainer调用comitIfNecessary方法确认消息.仅在注册的MessageListener成功处理消息后才会发生这种情况(无例外)
Camel使用EndpointMessageListener,最终在路由中调用下一个处理器(或生产者)的进程方法.由于这是典型的责任链,如果路由中的任何处理器抛出异常或在Exchange上设置异常,则EndpointMessageListener将重新抛出它,从而阻止AbstractMessageListener确认消息.
| 归档时间: |
|
| 查看次数: |
4919 次 |
| 最近记录: |