【问题标题】:Spring Transaction commit orderSpring事务提交顺序
【发布时间】:2018-03-20 03:39:17
【问题描述】:

我对春季事务管理中的提交顺序有疑问。我当前使用的应用程序要求

并且我的 MQ 接收的事务触发...

以下是操作顺序:

  1. MQ 接收消息
  2. 在 3 个表中插入数据库 - - 过程调用
  3. 在 3 个表中插入数据库 - - 过程调用
  4. 在 3 个表中插入数据库 - - 过程调用
  5. MQ 发布消息下游队列
  6. MQ 将消息发布到第二个下游队列

我已经测试了我所有的回滚案例。一个 当第 6 步失败时,它会回滚所有数据库事务,包括第 5 步 MQ 回滚。

我的问题是,一旦我们发布消息,我想了解提交顺序。它会在 MQ 提交到下游队列之前提交所有 3 DB 事务吗??

因为我想限制事务提交的顺序。 它必须按照 1,2,3,4,5 然后 6 的顺序

一旦我们发布消息,下游应用程序将访问我们在上述事务中插入的相同表。

有人可以指导我吗?事务的提交是如何工作的?

【问题讨论】:

    标签: spring spring-transactions javadb


    【解决方案1】:

    提交顺序与您预期的一样,但请记住以下几点:
    1. 据我了解,您可能只有一笔交易进行。此事务将在消息接收时开始,其他操作将添加到此单个事务中(这是许多事务 API 中的默认行为)。
    这意味着您有 ONLY 一个事务,因此 ONLY 一个全局提交(实际上是 2 个提交,一个到数据库系统,一个到队列系统)。
    这也意味着导致回滚的任何失败都会影响数据库和队列系统(如果配置,消息将返回队列或重试队列)。

    为了给你一个正确的答案,我需要知道你希望它如何工作。

    • 如果是这样:“即使最后一步失败,消息也被认为是成功的,应该提交数据库更改” 为此,您可能需要将这些步骤包含在单独的事务中(您可以查看 Spring 文档以获取事务注释 Spring Transactional
    • 如果有什么不同,我需要了解更多细节。

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 2018-08-15
      • 2018-05-05
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2019-11-25
      相关资源
      最近更新 更多