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

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

    如何落地最终一致性事务

    如何落地最终一致性事务 - 图1

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

  3. 在收到交易请求, 成功时可以 commit half message

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

    问题

    但是考虑到在这边系统完全没有必要增加事务, 因为发送消息到MQ是在交易结束后, 直接用一个字段判断状态, 然后用定时保证投递到MQ即可.
    1. RocketMQ的两段提交 half message
    2. 执行流程
    3. 根据流程结果: commit/rockback
    可以改成
    1. 执行流程
    2. RocketMQ send(普通消息)
    在这边的使用场景中, 因为提交了 half message 也不会发送消息, 等到流程执行结束了, 然后使用send发送普通消息即可.