Spring Amqp Hibernate 与 Rabbit 事务管理器

Spring Amqp Hibernate vs Rabbit Transaction Manager

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

我的问题

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

我为什么要问

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

我希望它如何工作

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

如果对我的问题有任何困惑,我很乐意提供我的 spring 配置。

对,如果你已经完全吹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