我有一个使用事务SimpleMessageListenerContainer的spring-amqp使用者。在容器上设置的TransactionManager是RabbitTransactionManager。我的MessageListener调用一个在其上有@Transactional注释的服务方法。在Spring中,我有一个HibernateTransactionManager,在bean声明中使用了@Primary注释,我打算将其用于我的存储库和服务。
我的问题
在上面描述的情况下,HibernateTransactionManager是否用于我的MessageListener中发生的服务方法调用?
为什么我要问
我正在调查我们系统中的一个错误,其中一些数据没有被持久化,我正在尝试排除错误的TransactionManager配置。
我希望如何使用
如果发生数据库回滚,我希望将消息重新排队。我可以完全删除RabbitTransactionManager并使用HibernateTransactionManager吗?
如果对我的要求有任何疑惑,我会很乐意提供我的弹簧配置。
答案 0 :(得分:0)
是的,如果你已经完全成功PlatformTransactionManager
,你也应该将它用于Spring AMQP MessageListenerContainer
。
由于RabbitMQ本身不像JMS那样支持事务,RabbitTransactionManager
不是必需的,必须由现有的事务资源支持替换。
Spring AMQP组件正在参与事务同步。