我遇到的情况是我正在使用消息使用者(javax.jms.MessageConsumer
)从队列中读取消息。
使用的会话使用AUTO_ACKNOWLEDGE模式。
从我到目前为止在AUTO_ACK模式中读到的内容:
在自动确认中,如果使用者的onMessage()方法完成且没有错误,则认为该消息已成功接收并处理,然后将从JMS服务器中删除。
我的问题是JMS生产者何时认为该消息是ACK,因为我没有使用具有onMessage()方法的MDB,而是使用前面描述的消息使用者来阅读消息。
使用messageConsumer成功读取消息后,消息是否已确认? 如果在逻辑链的下方使用相应的消息的方法会引发错误,会发生什么?那个时候消息已经被确认了吗?
答案 0 :(得分:1)
AUTO_ACKNOWLEDGE常量的Javadoc说:
使用此确认模式,会话自动确认 客户在会话时收到消息 成功返回从接听电话或消息时 会话已调用以成功处理消息的侦听器 回报。
我怀疑你在MessageConsumer上调用了receive(尽管你没有明确说明),所以如果你设置AUTO_ACKNOWLEDGE,它会被接收返回的时间确认。
当然,如果您有一个事务处理会话,则会忽略确认模式,并且在提交会话之前不会将该消息视为已接收。