一种分布式事务最终一致性方法技术

技术编号:28120214 阅读:34 留言:0更新日期:2021-04-19 11:25
本发明专利技术提供了一种分布式事务最终一致性方法,步骤依次为消息的预发送、执行业务逻辑、服务A更新消息状态、发送的消息、消息消费、执行业务逻辑、服务B更新消息状态、消息确认服务A、消息确认服务B、异常处理,本发明专利技术所述的一种分布式事务最终一致性方法,提供单独的消息服务和对应的消息SDK,相对强一致性方案实现简单,提高系统并发量;相对于TCC方案,侵入性小,实现简单、开发维护成本低;能够分布式事务的最终完成,解决现有最终一致性方案不能完全保证一致性的问题。证一致性的问题。证一致性的问题。

【技术实现步骤摘要】
一种分布式事务最终一致性方法


[0001]本专利技术属于事务处理
,尤其是涉及一种分布式事务最终一致性方法。

技术介绍

[0002]随着分布式服务架构的流行与普及,原来在单体应用中执行的多个逻辑操作,现在被拆分成了多个服务之间的远程调用。虽然服务化为我们的系统带来了水平伸缩的能力,然而随之而来挑战就是分布式事务问题,多个服务之间使用自己单独维护的数据库,它们彼此之间不在同一个事务中,假如A执行成功了,B执行却失败了,而A的事务此时已经提交,无法回滚,那么最终就会导致两边数据不一致性的问题;尽管很早之前就有基于两阶段提交的XA分布式事务,但是这类方案因为需要资源的全局锁定,导致性能极差;因此后面就逐渐衍生出了消息最终一致性、TCC等柔性事务的分布式事务方案;
[0003]1、消息生成者发送消息;
[0004]2、MQ收到消息,将消息进行持久化,在存储中新增一条记录;
[0005]3、返回ACK给生产者;
[0006]4、MQ推消息给对应的消费者,然后等待消费者返回ACK;
[0007]5、如果消息消费本文档来自技高网...

【技术保护点】

【技术特征摘要】
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,当消息状态为...

【专利技术属性】
技术研发人员:王君
申请(专利权)人:紫光云技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1