我们使用的是Spring的SessionAwareMessageListener。您似乎需要手动执行commit()或rollback(),以确保邮件被使用或标记为要重新传递。但我想知道您是否也可以省略它,然后期望SessionAwareMessageListener在没有发生异常的情况下自动提交,或者在出现异常的情况下回滚。
发布于 2015-05-15 01:55:23
我知道这是一个老生常谈的问题,但我的答案是:
不,SessionAwareMessageListener本身并不“需要”commit()或rollback()。您可以在没有这些调用的情况下在侦听器中编写代码,除非从onMessage()方法抛出异常,否则侦听器仍然会使用消息,并假定所有这些消息都没有问题。
为了让commit()和rollback()调用完成它们的预期功能,您必须使用事务处理会话。这可以通过在DefaultMessageListenerContainer上将sessionTransacted标志设置为true,或者通过定义您自己的事务管理器并将其附加到容器来实现。
https://stackoverflow.com/questions/26214689
复制相似问题