我们有一个监听消息队列的应用程序,我知道dmlc提供了一个sessionTransacted属性,我认为该属性允许我们手动提交消息接收事件,但是我不确定如何在侦听器中利用它。
如果没有设置ErrorHandler,似乎只需抛出一个RuntimeException,消息就会被放回队列并进入循环,但是我们想要特别提交接收。
。
public class JMSMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
// do something with the message and then manually commit
}
}
我有使用ActiveMQ的经验。当启用sessionTransacted
时,如果您的应用程序在onMessage
中意外关闭,则该消息将在重新启动后再次处理。如果会话没有被处理,它将会丢失。
您不能使用sessionTransacted
手动控制事务(除了抛出异常以回滚消息)。您可能想看看SessionAwareMessageListener,尽管我从未尝试过。