[发明专利]一种分布式事务最终一致性方法有效
申请号: | 202011342691.5 | 申请日: | 2020-11-25 |
公开(公告)号: | CN112671827B | 公开(公告)日: | 2023-03-07 |
发明(设计)人: | 王君 | 申请(专利权)人: | 紫光云技术有限公司 |
主分类号: | H04L67/1095 | 分类号: | H04L67/1095;H04L67/133;G06F9/46;G06F16/23 |
代理公司: | 天津滨海科纬知识产权代理有限公司 12211 | 代理人: | 杨正律 |
地址: | 300459 天津市滨海新区*** | 国省代码: | 天津;12 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分布式 事务 最终 一致性 方法 | ||
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,定时获取状态为Created且超时未发送的消息,并且向消息源端服务A确认该消息是否可发送;
S9、消息服务中的消息确认任务B,定时获取状态为Sended且超时未收到反馈的消息,并且向消息目标端服务B确认该消息是否执行完成;
S10、异常处理:消息服务中的消息失败通知服务,定时的将状态为SendFailed、AckFailed和Failed的消息,发送给管理员,最终由管理员人工处理异常;
所述步骤S1,当消息的状态是Created时;服务A通过SDK的调用是同步调用,消息服务将消息保存本地库,然后返回保存本地库成功或失败;如果消息服务保存消息失败,则直接异常,服务A不再向下执行逻辑;如果成功则执行步骤S2;
所述步骤S3,当消息状态为CanSend时,服务A通过SDK的调用是同步调用,保证更新状态成功,如果更新消息状态失败,则步骤S8兜底验证消息状态;
所述步骤S4,消息发送任务是一个定时任务,定时时间需要自行配置;当获取消息的状态为CanSend时;消息发送包含重试策略,重试策略包括:只发送一次或每隔相同的时间发送N次或在最小间隔时间和最大间隔时间之间发送N次,每次发送间隔逐步增加相同的值。
2.根据权利要求1所述的一种分布式事务最终一致性方法,其特征在于:所述步骤S5,服务B通过注册到RabbitMQ中的消费者接收消息;服务B获取到消息之后,会将唯一的消息ID缓存到Redis中。
3.根据权利要求1所述的一种分布式事务最终一致性方法,其特征在于:所述步骤S7,如果服务B业务逻辑执行成功,则更新消息状态为Completed,整个分布式事务完成;如果服务B业务逻辑执行失败,则更新消息状态为Failed;如果执行失败会由步骤S10人工兜底。
4.根据权利要求1所述的一种分布式事务最终一致性方法,其特征在于:所述步骤S8,消息服务中的消息确认任务A需要自定义设置超时时间和询问次数;如果该消息经过多次询问并未得到答复,则将该消息设置为SendFailed,并最终由步骤S10人工兜底。
5.根据权利要求1所述的一种分布式事务最终一致性方法,其特征在于:所述步骤S9,消息服务中的消息确认任务B需要自定义设置超时时间和询问次数;如果该消息经过多次询问并未得到答复,则将该消息设置为AckFailed,并最终由步骤S10人工兜底。
6.根据权利要求1所述的一种分布式事务最终一致性方法,其特征在于:所述步骤S10,消息失败通知服务自定义设置定时任务时间、发送管理员邮件或短信、消息的优先级,消息失败通知服务会根据优先级可以设置不同的反馈级别和定时任务的时间。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于紫光云技术有限公司,未经紫光云技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011342691.5/1.html,转载请声明来源钻瓜专利网。