0

我有一种情况,我正在使用消息使用者 ( javax.jms.MessageConsumer) 从队列中读取消息。使用的会话正在使用 AUTO_ACKNOWLEDGE 模式。

根据我目前在 AUTO_ACK 模式下阅读的内容:

在自动确认中,如果消费者的 onMessage() 方法完成且没有错误,则认为消息已成功接收和处理,然后将从 JMS 服务器中删除。

我的问题是,考虑到我没有使用具有 onMessage() 方法的 MDB,而是使用前面描述的消息使用者读取消息,JMS 生产者何时将消息视为 ACK。

使用 messageConsumer 成功阅读消息后,消息是否已确认?如果在逻辑链的下游,使用相应消息的方法会抛出错误,会发生什么?到那时消息是否已经被确认?

4

1 回答 1

1

AUTO_ACKNOWLEDGE 常量的 Javadoc 是这样说的:

使用这种确认模式,当会话从接收调用成功返回或会话调用以处理消息的消息侦听器成功返回时,会话自动确认客户端收到消息。

我怀疑您在 MessageConsumer 上调用接收(尽管您没有明确说明)所以如果您设置 AUTO_ACKNOWLEDGE 它在接收返回时得到确认。

当然,如果您有一个事务会话,那么确认模式将被忽略,并且在提交会话之前不会认为消息已接收。

于 2013-08-28T10:48:52.143 回答