使用Message Consumer时JMS AutoAcknowledge

时间:2013-08-28 09:43:33

标签: java queue jms

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

从我到目前为止在AUTO_ACK模式中读到的内容:

  

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

我的问题是JMS生产者何时认为该消息是ACK,因为我没有使用具有onMessage()方法的MDB,而是使用前面描述的消息使用者来阅读消息。

使用messageConsumer成功读取消息后,消息是否已确认? 如果在逻辑链的下方使用相应的消息的方法会引发错误,会发生什么?那个时候消息已经被确认了吗?

1 个答案:

答案 0 :(得分:1)

AUTO_ACKNOWLEDGE常量的Javadoc说:

  

使用此确认模式,会话自动确认   客户在会话时收到消息   成功返回从接听电话或消息时   会话已调用以成功处理消息的侦听器   回报。

我怀疑你在MessageConsumer上调用了receive(尽管你没有明确说明),所以如果你设置AUTO_ACKNOWLEDGE,它会被接收返回的时间确认。

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