我们有一个应用程序在队列中侦听消息,我知道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
}
}
答案 0 :(得分:2)
A有ActiveMQ的经验。启用sessionTransacted
后,如果您的应用程序在onMessage
中意外关闭,则重新启动后将再次处理该消息。如果会话未进行交易,则会丢失。
您无法使用sessionTransacted
手动控制事务(除了抛出异常以回滚消息)。你可能想看看SessionAwareMessageListener,虽然我从未尝试过。