我知道Camel的JMS组件用于接收消息,使用Springs DefaultMessageListenerContainer。可以将其配置为使用 CLIENT_ACKNOWLEDGE 模式来确认消息。我的问题是,什么时候调用 message.acknowledge() 方法?它是由spring的监听器容器内部调用的吗?
或者我可以以某种方式随意确认消息吗?
我想避免消息丢失的情况,因为我的应用程序在处理这些消息期间崩溃了,并且使其成为事务性的对我来说似乎有点太重了
好的。经过一些调试和扫描源代码后,我发现 Camel 使用 spring MessageListenerContainers。在 CLIENT_AKNOWLEDGE 模式下,AbstractMessageListenerContainer 会调用 comitIfNecessary 方法来确认消息。仅在注册的 MessageListener 成功处理消息之后才会发生这种情况(无例外)
Camel 使用 EndpointMessageListener 最终调用下一个处理器(或生产者)的 process 方法。由于这是经典的责任链,如果路由下游的任何处理器抛出异常或在 Exchange 上设置异常,EndpointMessageListener 将重新抛出异常,从而阻止 AbstractMessageListener 确认消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)