代码之家  ›  专栏  ›  技术社区  ›  Josh Chappelle

Spring Amqp Hibernate vs Rabbit事务管理器

  •  0
  • Josh Chappelle  · 技术社区  · 7 年前

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

    我的问题

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

    我为什么这么问

    我正在调查我们的系统的一个bug,其中一些数据没有得到持久化,我试图排除TransactionManager配置错误的可能性。

    我希望它如何工作

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Artem Bilan    7 年前

    好的,如果你已经完全爆发了 PlatformTransactionManager ,您应该将其用于春季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