如何使用 spring 的 DefaultMessageListenerContainer 进行手动提交?



我们有一个监听消息队列的应用程序,我知道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,尽管我从未尝试过。

相关内容

  • 没有找到相关文章

最新更新