繁体   English   中英

XA 事务和消息总线

[英]XA transactions and message bus

在我们的新项目中,我们希望实现涉及 jpa (mysql) 和消息总线 (rabbitmq) 的事务

我们开始使用 mysql 和 rabbitmq(通过 spring amqp 模块)使用 spring 数据构建我们的基础设施。 由于rabbitMq 不是XA-transactional,我们将neo4j chainedTransactionManager 配置为我们的主要transactionManager。 这个管理器将 jpa txManager 和 rabbitTransactionManager 作为参数。

现在,我确实能够使用 @Transacitonal 注释服务并在其中同时使用 jpa 和 rabbit 。 如果我在服务中抛出异常,则实际上不会发生任何操作。

以下是我的问题:

  1. 这个配置真的给了我一个原子事务吗?
  2. 我听说链式 tx 管理器不是使用 2 阶段提交而是“尽力而为”,这种尽力而为不那么可靠吗? 如果是这样怎么办?

ChainedTransactionManager所做的基本上是以相反的顺序启动和提交事务。 所以如果你有一个JpaTransactionManager和一个RabbitTransactionManager并像这样配置它。

@Bean
public PlatformTransactionManager transactionManager() {
    return new ChainedTransactionManager(rabbitTransactionManager(), jpaTransactionManager());
}

现在,如果 JPA 提交成功但您对 rabbitMQ 的提交失败,您的数据库更改仍将保留,因为这些更改已提交。

要回答您的第一个问题,它不会为您提供真正的原子事务,在发生Exception (提交时)之前已提交的所有内容都将保持提交。

http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/transaction/ChainedTransactionManager.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM