分布式事务相当于本地事务加上消息传递。先扣钱再加钱。牺牲了延迟性,保障数据最终一致。

消息的可靠存储:

  1. Transactional outbox 本地一个数据库通过事务保障 begin transaction

    1. polling publiser 去拉mysql中的记录从而通过消息队列发送
    2. 改用canal订阅binlog再发送到mq。

消息的重复消费,使用幂等处理来解

  1. 版本号来解决
  2. 全局唯一ID加去重表

2PC二阶段提交

  1. 存在事务协调者和事务参与者