当前位置: 首页 > 知识库问答 >
问题:

Spring Amqp Hibernate vs Rabbit事务管理器

靳彦
2023-03-14

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

我的问题

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

我为什么这么问

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

我希望它如何工作

如果发生数据库回滚,我希望重新发送html" target="_blank">消息。我可以完全删除RabbitTransactionManager并使用HibernateTransactionManager吗?

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

共有1个答案

段劲
2023-03-14

好的,如果您已经完全成熟了,那么您也应该将它用于Spring AMQPMessageListenerContainer

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

Spring AMQP组件正确地参与了事务同步。

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

 类似资料:
  • 事务处理(transaction processing) 可以用来维护数据的完整性,保证SQL的操作要么完全执行,要么完全不执行,如果发生错误就进行撤销。 保证数据的完整性。 保证数据不受外影响。 事务处理的几道术语 事务(transaction) 一组SQL语句 退回(rollback)撤销执行SQL语句的过程 提交(commit) 将为执行的SQL语句写入数据库表 保留点(savepoint)

  • 17. 事务管理

  • 数据库的事务就是将任意多个SQL语句看作一个整体,只有这些SQL语句都成功执行,DBMS才会保存这些SQL语句对数据库的修改(事务提交)。否则,数据库将恢复到执行SQL语句之前的状态(事务回滚)。大多数DBMS都支持两种事务模式:隐式模式和显式模式。当执行每一条SQL语句时,无需进行事务提交,就可以直接将修改结果保存到数据库中。这叫做隐式事务模式。显式模式必须使用相应的语句或命令开起事务、提交事务

  • 主要内容:一、事务(Transaction),二、MySql中的应用,三、源码分析,四、总结一、事务(Transaction) 事务是什么?按照书上说的就是系统的一套操作为了保持数据的完整性必须符合ACID的特性,即原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、 持久性(Durability)。原子性比较好理解,操作要么全执行完成,要么全不执行完,实现这种方式就要支持回滚操作。而一致性指的是事务在改变状态时,要保证所有的访问得到的结果是相同的。一

  • 问题内容: 我刚刚开始使用spring和hibernate进行项目。我的DAO图层类扩展了HibernateDaoSupport。我们没有使用注释。之前,我们使用了struts,因此我们使用了Session类提供的getTransaction,commit,rollback ..方法。我的要求非常简单,对于所有DAO类,如果有异常,则回滚,否则提交。请提出介绍spring交易管理的最简单方法。 问

  • 本文向大家介绍浅谈MyBatis 事务管理,包括了浅谈MyBatis 事务管理的使用技巧和注意事项,需要的朋友参考一下 1. 运行环境 Enviroment 当 MyBatis 与不同的应用结合时,需要不同的事务管理机制。与 Spring 结合时,由 Spring 来管理事务;单独使用时需要自行管理事务,在容器里运行时可能由容器进行管理。 MyBatis 用 Enviroment 来表示运行环境,

  • 我试图将Spring引导指南中的管理事务示例扩展到两个数据源,但是@事务注释似乎只适用于其中一个数据源。 在"Application.java"中,我添加了两个数据源及其Jdbc模板的bean。在"BookingService.java"中,我使用了属于第二个数据源的JdbcTemboard。 这是我的“Application.java”: 下面是“BookingService.java”: 这些

  • 有什么想法吗?