骆驼、JMS、CLIENT_ACKNOWLEDGE 模式 [英] camel, JMS, CLIENT_ACKNOWLEDGE mode

查看:33
本文介绍了骆驼、JMS、CLIENT_ACKNOWLEDGE 模式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道 Camel 的 JMS 组件用于接收消息,使用 Springs DefaultMessageListenerContainer.它可以配置为使用 CLIENT_ACKNOWLEDGE 模式来确认消息.我的问题是,究竟何时调用 message.acknowledge() 方法?它是由 spring 的侦听器容器在内部调用吗?

I know that Camel's JMS component, for receiving messages, uses Springs DefaultMessageListenerContainer. It can be configured to use CLIENT_ACKNOWLEDGE mode for acknowledging messages. My question is, when exactly the message.acknowledge() method gets called? Is it called internally by the spring's listener container?

或者我能以某种方式随意确认消息吗?

Or can I somehow acknowledge message at my will?

我想避免消息丢失的情况,因为我的应用程序在处理这些消息的过程中崩溃了,并且使其事务性对我来说似乎有点太重了

I'd like to avoid scenario that messages get lost because my app crashed during processing of these messages and making it transactional seems a bit too heavy for me

推荐答案

好的.经过一些调试和扫描源代码后,我发现 Camel 使用 spring MessageListenerContainers.AbstractMessageListenerContainer,在 CLIENT_AKNOWLEDGE 模式的情况下,调用comitIfNecessary 方法确认消息.仅在注册的 MessageListener 成功处理消息后才会发生这种情况(无异常)

OK. After some some debugging and scanning throug source code I've found out that Camel uses spring MessageListenerContainers. The AbstractMessageListenerContainer, in case of CLIENT_AKNOWLEDGE mode, invokes comitIfNecessary method acknowledging message. This happens only AFTER registered MessageListener processes message succesfully (no exceptions)

Camel 使用 EndpointMessageListener,它最终会调用沿途的下一个处理器(或生产者)的 process 方法.由于这是典型的职责链,如果路由中的任何处理器在 Exchange 上抛出异常或设置异常,EndpointMessageListener 将重新抛出该异常,从而阻止 AbstractMessageListener 确认消息.

Camel uses EndpointMessageListener which, eventually, invokes process method of next processor (or Producer) down the route. As this is classic chain of responsibilities, if any processor down the route throws exception or sets exception on the Exchange, it will be re-thrown by EndpointMessageListener preventing the AbstractMessageListener to acknowledge message.

这篇关于骆驼、JMS、CLIENT_ACKNOWLEDGE 模式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆