【技术实现步骤摘要】
一种分布式事务最终一致性方法
[0001]本专利技术属于事务处理
,尤其是涉及一种分布式事务最终一致性方法。
技术介绍
[0002]随着分布式服务架构的流行与普及,原来在单体应用中执行的多个逻辑操作,现在被拆分成了多个服务之间的远程调用。虽然服务化为我们的系统带来了水平伸缩的能力,然而随之而来挑战就是分布式事务问题,多个服务之间使用自己单独维护的数据库,它们彼此之间不在同一个事务中,假如A执行成功了,B执行却失败了,而A的事务此时已经提交,无法回滚,那么最终就会导致两边数据不一致性的问题;尽管很早之前就有基于两阶段提交的XA分布式事务,但是这类方案因为需要资源的全局锁定,导致性能极差;因此后面就逐渐衍生出了消息最终一致性、TCC等柔性事务的分布式事务方案;
[0003]1、消息生成者发送消息;
[0004]2、MQ收到消息,将消息进行持久化,在存储中新增一条记录;
[0005]3、返回ACK给生产者;
[0006]4、MQ推消息给对应的消费者,然后等待消费者返回ACK;
[000 ...
【技术保护点】
【技术特征摘要】
1.一种分布式事务最终一致性方法,其特征在于:包括以下步骤S1、消息的预发送:服务A在执行本地业务逻辑之前,首先通过消息SDK调用消息服务接口,将消息保存消费服务对应数据库中;S2、执行业务逻辑:服务A执行需要保证事务的业务逻辑;S3、服务A更新消息状态:服务A通过SDK调用消息服务更新消息状态为CanSend;S4、发送的消息:消息服务中的消息发送任务,定时的从消息服务的数据库中获取可发送但未发送状态的消息,并发送到RabbitMQ中;S5、消息消费:消息消费者
‑
服务B,通过SDK注册消费者到RabbitMQ,当RabbitMQ中存在消息则接收消息并消费;S6、执行业务逻辑:服务B执行事务内的业务逻辑;S7、服务B更新消息状态:服务B根据执行业务逻辑的结果,通过SDK调用消息服务,更新消息状态为Completed或Failed;S8、消息确认服务A:消息服务中的消息确认任务A,定时获取状态为Created且超时未发送的消息,并且向消息源端(即服务A)确认该消息是否可发送;S9、消息确认服务B:消息服务中的消息确认任务B,定时获取状态为Sended且超时未收到反馈的消息,并且向消息目标端(即服务B)确认该消息是否执行完成;S10、异常处理:消息服务中的消息失败通知服务,定时的将状态为SendFailed、AckFailed和Failed的消息,发送给管理员,最终由管理员人工处理异常。2.根据权利要求1所述的一种分布式事务最终一致性方法,其特征在于:所述步骤S1,当消息的状态是Created时;服务A通过SDK的调用是同步调用,消息服务将消息保存本地库,然后返回保存本地库成功或失败;如果消息服务保存消息失败,则直接异常,服务A不再向下执行逻辑;如果成功则执行步骤2。3.根据权利要求1所述的一种分布式事务最终一致性方法,其特征在于:所述步骤S3,当消息状态为...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。