咱们今天聊一聊分布式事务的另一种方案,本地消息表:
-
A系统在自己本地一个事务里操作同时,插入一条数据到消息表
-
接着A系统将这个消息发送到MQ中
-
B系统接收到消息之后,在一个事务里,往自己本地消息表里插入一条数据,同时执行其他的业务操作,如果这个消息已经被处理过了,那么此时这个事务会回滚,这样保证不会重复消费
-
B系统执行成功之后,就会更新自己本地消息的状态以及A系统消息表的状态
-
如果B系统处理失败了,那么就不会更新消息表状态,那么此时A系统会定时扫描自己的消息表,如果没有处理的消息,会再次发送到MQ中,让B再次处理
-
这个方案保证了最终一致性,哪怕B事务失败了,但A会不断重发消息,直到B那边成功为止
这个方案说实话最大的问题就在于严重依赖数据库的消息表来管理事务啥的???这个会导致如果是高并发场景咋办?咋扩展?所以一般确实很少用
大家别急 ,我会一点点跟大家分享分布式事务,从最初的AX一直到可靠消息最终一致性。
希望大家持续关系我的博客!!!