我们正在使用Spring的SessionAwareMessageListener
。您似乎需要手动commit()
或rollback()
以确保邮件已被使用或标记为要重新传递。但是我想知道你是否也可以把它留下来,然后期望SessionAwareMessageListener
在没有异常的情况下自动提交,或者如果发生异常则回滚。
答案 0 :(得分:1)
我知道这是一个老问题,但这是我的答案:
不,SessionAwareMessageListener
没有"要求"一个commit()
或rollback()
本身。您可以在没有这些调用的情况下在侦听器中使用代码,并且侦听器仍然会使用消息并假设所有消息都没有问题,除非从onMessage()
方法抛出异常。
对于commit()
和rollback()
调用来执行他们打算执行的操作,您必须使用事务处理会话。这可以通过在sessionTransacted
上将true
标记设置为DefaultMessageListenerContainer
,或者通过定义并将您自己的事务管理器附加到容器来完成。