Java进阶训练营学习笔记
课程: Java进阶训练营
老师: 中华石杉
邀请码: 二维码

作业:如果对自己的系统落地最终一致性事务,如何落地实现?

  1. 首先熟悉自己负责的业务, 熟悉系统间交互流程, 哪些可以异步, 哪些是必须同步
  2. 异步的时候要考虑是否需要一致性, 当前系统通知流程如图

如何落地最终一致性事务

最终一致性事务方案

根据课程思考最终一致性事务修改:

  1. 在收到交易请求, 成功时可以 commit half message
  2. 同时 需要实现 check方法, 供RocketMQ回调, 检查本地事务状态
  3. 在交易成功或失败时再进行commit或rollback
  4. rollback消息 RocketMQ会定期删除
  5. 通知系统收到消息存储到本地并通知商户

问题

但是考虑到在这边系统完全没有必要增加事务, 因为发送消息到MQ是在交易结束后, 直接用一个字段判断状态, 然后用定时保证投递到MQ即可.

1
2
3
RocketMQ的两段提交 half message
执行流程
根据流程结果: commit/rockback

可以改成

1
2
执行流程
RocketMQ send(普通消息)

在这边的使用场景中, 因为提交了 half message 也不会发送消息, 等到流程执行结束了, 然后使用send发送普通消息即可.