Spring Amqp Hibernate vs Rabbit Transaction Manager

时间:2017-11-13 17:11:55

标签: spring-transactions spring-amqp

我有一个使用事务SimpleMessageListenerContainer的spring-amqp使用者。在容器上设置的TransactionManager是RabbitTransactionManager。我的MessageListener调用一个在其上有@Transactional注释的服务方法。在Spring中,我有一个HibernateTransactionManager,在bean声明中使用了@Primary注释,我打算将其用于我的存储库和服务。

我的问题

在上面描述的情况下,HibernateTransactionManager是否用于我的MessageListener中发生的服务方法调用?

为什么我要问

我正在调查我们系统中的一个错误,其中一些数据没有被持久化,我正在尝试排除错误的TransactionManager配置。

我希望如何使用

如果发生数据库回滚,我希望将消息重新排队。我可以完全删除RabbitTransactionManager并使用HibernateTransactionManager吗?

如果对我的要求有任何疑惑,我会很乐意提供我的弹簧配置。

1 个答案:

答案 0 :(得分:0)

是的,如果你已经完全成功PlatformTransactionManager,你也应该将它用于Spring AMQP MessageListenerContainer

由于RabbitMQ本身不像JMS那样支持事务,RabbitTransactionManager不是必需的,必须由现有的事务资源支持替换。

Spring AMQP组件正在参与事务同步。

https://docs.spring.io/spring-amqp/docs/2.0.0.RELEASE/reference/html/_reference.html#_using_the_rabbittransactionmanager