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 组件正在正确参与事务同步。
我有一个使用事务性 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 组件正在正确参与事务同步。