如何落地最终一致性事务
作业:如果对自己的系统落地最终一致性事务,如何落地实现?
- 首先熟悉自己负责的业务, 熟悉系统间交互流程, 哪些可以异步, 哪些是必须同步
- 异步的时候要考虑是否需要一致性, 当前系统通知流程如图
如何落地最终一致性事务
根据课程思考最终一致性事务修改:
- 在收到交易请求, 成功时可以 commit half message
- 同时 需要实现 check方法, 供RocketMQ回调, 检查本地事务状态
- 在交易成功或失败时再进行commit或rollback
- rollback消息 RocketMQ会定期删除
- 通知系统收到消息存储到本地并通知商户
问题
但是考虑到在这边系统完全没有必要增加事务, 因为发送消息到MQ是在交易结束后, 直接用一个字段判断状态, 然后用定时保证投递到MQ即可.
1 | RocketMQ的两段提交 half message |
可以改成
1 | 执行流程 |
在这边的使用场景中, 因为提交了 half message 也不会发送消息, 等到流程执行结束了, 然后使用send发送普通消息即可.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 程序员小航!
评论