驼峰、JMS、客户机确认模式

驼峰、JMS、客户机确认模式,jms,apache-camel,Jms,Apache Camel,我知道Camel的JMS组件用于接收消息,使用Springs DefaultMessageListenerContainer。它可以配置为使用客户端确认模式来确认消息。我的问题是,究竟什么时候调用message.acknowledge()方法?它是由spring的侦听器容器内部调用的吗 或者我可以随意地承认这个消息吗 我希望避免出现这样的情况:消息丢失,因为我的应用程序在处理这些消息的过程中崩溃,使其事务性对我来说似乎有点太重了。在对源代码进行了一些调试和扫描之后,我发现Camel使用Sprin

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

或者我可以随意地承认这个消息吗


我希望避免出现这样的情况:消息丢失,因为我的应用程序在处理这些消息的过程中崩溃,使其事务性对我来说似乎有点太重了。在对源代码进行了一些调试和扫描之后,我发现Camel使用SpringMessageListenerContainers。在客户端确认模式下,AbstractMessageListenerContainer调用确认消息的ComitifRequired方法。这仅在注册的MessageListener成功处理消息后发生(无异常)


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

感谢bro为我节省了时间。是否可以禁用此行为,以便我可以在驼峰上下文之外手动确认消息?如果我根本不确认消息,会发生什么?是否存在超时,直到其他使用者再次激活?