利用RabbitMQ队列消费特性避免峰值下的DB访问,缓解连接压力,在DB释放连接后再去消息数据。
)XA协议:它是一个分布式事务协议,由事务管理器和资源管理器组成。
)TCC:基于2PC分布式事务实现方案,代码侵入性极高,Try、Confirm、Cancel。
)MQ >>> RabbitMQ:基于BASE理论的最终一致性。
demo:用户下单(订单服务与库存服务是不同的存储服务,也就是不在一个mysql里)https://github.com/mrjdrs/distributed-transaction.git
1、将订单更新到mysql
2、若订单成功插入到mysql后,往mq里发条更新库存的消息
3、若更新库存成功,发送一条成功的消息到订单服务;失败则发送失败的消息
4、订单服务接收到成功的回调后,修改订单状态;接收到失败消息后,则删除之前创建的那笔订单;这样变能保证最终一致性
原文:https://www.cnblogs.com/bzfsdr/p/11906222.html