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

时间:2011-04-07 19:05:16

标签: java spring commit mq

我们有一个应用程序在队列中侦听消息,我知道dmlc提供了sessionTransacted属性,我假设它允许我们手动提交消息接收事件,但是我不知道如何在Listener中利用它。

似乎只是通过抛出RuntimeException,如果没有设置ErrorHandler但是我们希望专门提交接收,那么消息会被放回队列并进入循环。

e.g。

public class JMSMessageListener implements MessageListener {

    @Override
    public void onMessage(Message message) {
       // do something with the message and then manually commit
    }
}

1 个答案:

答案 0 :(得分:2)

A有ActiveMQ的经验。启用sessionTransacted后,如果您的应用程序在onMessage中意外关闭,则重新启动后将再次处理该消息。如果会话未进行交易,则会丢失。

您无法使用sessionTransacted手动控制事务(除了抛出异常以回滚消息)。你可能想看看SessionAwareMessageListener,虽然我从未尝试过。