RabbitMq实现分布式事务
RabbitMq实现分布式事务的原理是最终保持一致性
外卖的订单服务通过rabbitmq异步调派单服务
rabbitmq保证事务一致性应满足以下要求
- confirm机制保证订单服务投递的消息到达MQ
- 手动ack机制保证派单服务不丢失MQ发过来的信息
- MQ的补偿重试机制降低了因网络抖动的原因而订单----派单服务执行失败
- 如果订单服务执行失败而回滚,那么补单消费者将补单重新插入一条数据进入订单表,保证派单服务能正确执行
- 如果派单服务执行异常,那么派单消费者将补偿重试,仍旧失败那么将会放弃该消息并写入日志
- 定期job对数和人工补偿,保证数据的一致性
存在缺点:如果派单服务异常是不需要回滚也无法回滚,如果派单发现要派往的地方达几十公里,不符合外卖派送的规则,那么无法撤消订单和派单,只能认同订单和派单,不过可以标记其为异常