当前位置: 首页 > 知识库问答 >
问题:

camel、JMS、CLIENT_ACKNOWLEDGE模式

解晟睿
2023-03-14

我知道Camel用于接收消息的JMS组件使用Springs DefaultMessageListenerContainer。可以将其配置为使用CLIENT_ACKNOWLEDGE模式来确认消息。我的问题是,到底什么时候调用message.acknowledge()方法?它是由Spring的侦听器容器内部调用的吗?

共有1个答案

徐承载
2023-03-14

好的。经过一些调试和扫描源代码,我发现Camel使用spring MessageListenerContainers。在CLIENT_AKNOWLEDGE模式下,AbstractMessageListenerContainer调用ComitiF必要方法确认消息。只有在注册的MessageListener成功处理消息后才会发生这种情况(没有例外)

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

 类似资料:
  • 您好,我的基本要求是有一个可以发送消息的路由,并将其放在JMS队列中。camel上下文在JavaEE 6容器中运行,即JBoss AS 7.1.1,因此它附带了HornetQ for JMS;我通过引导单例启动上下文,但我不使用camel cdi。到目前为止,我一直在使用camel-jms组件,但现在我希望尽可能迁移到camel-sjms,因为springless。 我的问题是:在这个JavaEE

  • 我已经检查了行动2第9章示例中的Camel,并查看了之前的问题和用户组线程,但仍然卡住了。。。 我正在使用Spring引导和骆驼2.18.x,我试图将骆驼示例代码中的两个示例合并为一个:模拟endpoint并替换来自 工作场景: 我创建一个测试路由 工作场景: 我改变了目的地,直接-- 期望:我假设JMS将被mock所取代,日志似乎也是这样表明的。不知道为什么JMSProducer会被调用。这是预

  • 我正试图用确认模式客户端创建一个会话,但遇到以下异常: 代码:

  • 我正在使用Camel开发客户端/服务器请求/回复系统。 客户机和服务器使用两个JMS队列进行通信:请求队列和响应队列。 服务器端有一个camel路由,它使用来自请求队列的JMS消息并同时处理消息。使用响应队列将响应发送回客户端。 客户端向JMS队列发送消息并等待响应。我有两个问题: > 客户端实际上是其他应用程序将使用的库。我也想在客户端使用Camel,但不知道如何将Camel用作“函数”,即在我

  • 正在使用Apache Camel JMS、XA事务(atomikos)和Java/Spring。添加了一些代码来处理camel路由和业务逻辑处理过程中可能发生的异常,即使用OnException。下面是在我们进入一个问题之前的实际代码,在异常发生后,onException代码按照指定的数量像重试一样处理它;将控件发送到错误处理程序,然后继续循环,一次又一次地处理相同的消息,并在发生异常和重试失败时

  • 我有一个旧的应用程序,它用ActiveMQ 5.8.0处理JMS消息,还有一些JNDI远程主题连接到这个ActiveMQ。 我有一个这样的连接器: 它工作得很好,但是现在,由于一些技术原因(严格的JMS 1.1),我需要使用“ConnectionFactory”而不是“TopicConnectionFactory”。在实际配置中,我被卡住了,因为ActiveMQ似乎使用了“TopicConnect