一种基于saga实现BPMN状态机的方法技术

技术编号:36607159 阅读:16 留言:0更新日期:2023-02-04 18:31
本发明专利技术公开一种基于saga实现BPMN状态机的方法,通过自定义的可视化服务编排界面绘制bpnm状态图,定义服务调用的流程,并设置每个服务对应的补偿动作,以及补偿失败的重试次数和重试间隔等内容。而后,通过restful接口或java API操作事务控制服务器,由事务控制服务器启动事务,根据bpnm定义的流程调用各个服务,并在异常时执行恢复策略。恢复策略分为向前重试和向后补偿俩种,这俩种策略都需要保证被调用服务与补偿动作的幂等性,同时向后补偿策略对各个被调用服务有较小的业务入侵。策略对各个被调用服务有较小的业务入侵。策略对各个被调用服务有较小的业务入侵。

【技术实现步骤摘要】
一种基于saga实现BPMN状态机的方法


[0001]本专利技术涉及分布式
,尤其涉及一种基于saga实现BPMN状态机的方法。

技术介绍

[0002]目前在电信运营商下涉及多个业务领域的服务编排系统,或缺少统一的分布式事务管理机制,或需要对业务领域的接口服务进行较大改动以支持分布式事务。
[0003]在现有的技术下,服务编排往往涉及大量其他公司提供的服务或历史遗留系统,编排出来的服务业务流程长,涉及业务多,难以对所有服务进行大量改造,事务管理难度大,且服务调用过程难以跟踪。

技术实现思路

[0004]本专利技术的目的在于提供一种基于saga实现BPMN状态机的方法。
[0005]本专利技术采用的技术方案是:一种基于saga实现BPMN状态机的方法,其包括以下步骤:步骤1,在服务编排阶段,通过自定义的可视化服务编排界面进行事务配置形成事务信息;步骤2,将配置好的事务信息以json格式发送到事务控制服务器,事务控制服务器对json进行解析转换为符合bpmn规范的xml文档形式的事务信息,并将节点信息、补偿动作以及扩展内容记入数据库中;步骤3,用户操控事务控制服务器从数据库获取配置好的事务信息以启动全局事务,调用bpmn状态机引擎构建状态实例,;步骤4,事务控制服务器通过restful或RPC生成唯一的分支事务主键,同步或异步顺序调用分支事务中指定的服务并记录事务状态和每个服务的分支事务主键;步骤5,判断分支事务是否执行成功;是则,执行步骤11;否则,执行步骤6;步骤6,判断是否达到分支事务重试上限;是则,执行步骤7;否则,执行步骤4;步骤7,判断是否启动向后补充策略;是则,执行步骤8;否则,执行步骤10;步骤8,事务控制服务器设置全局事务状态为“补偿中”,找出需要补偿的状态,执行对应分支事务的补偿逻辑;步骤9,更判断是否所有分支事务的补偿状态均为完成状态;是则,执行步骤11;否则,定位至下个待补偿的分支事务并执行步骤8;步骤10,判断是否忽略失败继续执行;是则,执行步骤11;否则,执行步骤12;步骤11,更新全局事务状态并记录日志,判断当前全局事务状态是否为终止状态;是则,执行步骤12;否则,事务控制服务器继续流转bpmn状态机引擎并执行步骤3;步骤12,事务控制服务器结束全局事务。
[0006]进一步地,自定义的可视化服务编排界面的界面风格参考钉钉审批流程界面。
[0007]进一步地,步骤1事务信息包括异常恢复策略、服务失败后的重试次数、服务对应
的补偿动作,以及补偿失败的重试次数和重试间隔。
[0008]进一步地,步骤3中,用户利用客户机通过调用restful接口或java API操作事务控制服务器。
[0009]进一步地,事务控制服务器同时提供管理界面对全局和分支事务的状态进行监控、维护。
[0010]进一步地,向后补偿策略下,步骤4中分支事务中指定的服务被调用时在本地数据库中记录服务执行日志并记录分支事务主键;当指定的服务调用成功时,标记分支事务的状态为已执行;当指定的服务调用失败时,标记分支事务的状态为执行失败。
[0011]进一步地,步骤8中的具体步骤如下:步骤8

1,判断分支事务是否存在;是则,执行步骤8

2;否则,执行步骤8

6;步骤8

2,判断分支事务的状态是否为已执行;是则,执行步骤8

3;否则,执行步骤8

6;步骤8

3,执行对应分支事务的补偿逻辑,记录补偿日志和分支事务主键;步骤8

4,判断执行补偿是否成功;是则,更新对应分支事务的补偿状态并执行步骤9;否则,执行步骤8

4;步骤8

5,判断是否达到补偿重试上限;是则,执行步骤8

6;否则,执行步骤8

3;步骤8

6,结束补偿,同时将向后补充策略变更为向前重试策略并执行步骤7。
[0012]进一步地,步骤11的全局事务状态包括“提交成功”、“提交失败”、“回滚成功”或“回滚失败”。
[0013]本专利技术采用以上技术方案,采用中心化的控制编排方式执行分支事务的调度,更容易从全局事务其进行协调,在异构的分布式组件中协调状态;能够从控制器的层面了解整个分布式系统的状态;通过在服务提供端引入一套java类库,实现对分支事务的支持,降低服务改造难度;在控制端完整记录状态机实例日志,方便在控制端宕机或重启后通过日志恢复事务上下文。
[0014]本专利技术基于saga的理论基础,结合可视化的流程编辑界面绘制bpnm状态机。同时采用编排式架构,以无侵入或少量侵入的方式实现微服务的下分布式事务,并提供控制中心对分布式事务的状态进行监控、维护,实现服务调用跟踪以及手动/自动的事务回滚操作。
附图说明
[0015]以下结合附图和具体实施方式对本专利技术做进一步详细说明;图1为本专利技术一种基于saga实现BPMN状态机的方法的流程示意图;图2为本专利技术分支事务的执行流程示意图;图3为本专利技术分支事务的补偿流程示意图。
具体实施方式
[0016]为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图对本申请实施例中的技术方案进行清楚、完整地描述。
[0017]如图1至3之一所示,本专利技术公开了一种基于saga实现BPMN状态机的方法,其包括
以下步骤:步骤1,在服务编排阶段,通过自定义的可视化服务编排界面进行事务配置形成事务信息;步骤2,将配置好的事务信息以json格式发送到事务控制服务器,事务控制服务器对json进行解析转换为符合bpmn规范的xml文档形式的事务信息,并将节点信息、补偿动作以及扩展内容记入数据库中;步骤3,用户操控事务控制服务器从数据库获取配置好的事务信息以启动全局事务,调用bpmn状态机引擎构建状态实例,;步骤4,事务控制服务器通过restful或RPC生成唯一的分支事务主键,同步或异步顺序调用分支事务中指定的服务并记录事务状态和每个服务的分支事务主键;步骤5,判断分支事务是否执行成功;是则,执行步骤11;否则,执行步骤6;步骤6,判断是否达到分支事务重试上限;是则,执行步骤7;否则,执行步骤4;步骤7,判断是否启动向后补充策略;是则,执行步骤8;否则,执行步骤10;步骤8,事务控制服务器设置全局事务状态为“补偿中”,找出需要补偿的状态,执行对应分支事务的补偿逻辑;步骤9,更判断是否所有分支事务的补偿状态均为完成状态;是则,执行步骤11;否则,定位至下个待补偿的分支事务并执行步骤8;步骤10,判断是否忽略失败继续执行;是则,执行步骤11;否则,执行步骤12;步骤11,更新全局事务状态并记录日志,同时判断当前全局事务状态是否为终止状态;是则,执行步骤12;否则,事务控制服务器继续流转bpmn状态机引擎并执行步骤3;步骤12,事务控制服务器结束全局事务。
[0018本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于saga实现BPMN状态机的方法,其特征在于:其包括以下步骤:步骤1,在服务编排阶段,通过自定义的可视化服务编排界面进行事务配置形成事务信息;步骤2,将配置好的事务信息以json格式发送到事务控制服务器,事务控制服务器对json进行解析转换为符合bpmn规范的xml文档形式的事务信息,并将节点信息、补偿动作以及扩展内容记入数据库中;步骤3,用户操控事务控制服务器从数据库获取配置好的事务信息以启动全局事务,调用bpmn状态机引擎构建状态实例;步骤4,事务控制服务器通过restful或RPC生成唯一的分支事务主键,同步或异步顺序调用分支事务中指定的服务并记录事务状态和每个服务的分支事务主键;步骤5,判断分支事务是否执行成功;是则,执行步骤11;否则,执行步骤6;步骤6,判断是否达到分支事务重试上限;是则,执行步骤7;否则,执行步骤4;步骤7,判断是否启动向后补充策略;是则,执行步骤8;否则,获取当前分支事务的结果并执行步骤10;步骤8,事务控制服务器设置全局事务状态为“补偿中”,找出需要补偿状态的分支事务,执行对应分支事务的补偿逻辑;步骤9,更判断是否所有分支事务的补偿状态均为完成状态;是则,执行步骤11;否则,定位至下个待补偿的分支事务并执行步骤8;步骤10,判断是否忽略失败继续执行;是则,执行步骤11;否则,执行步骤12;步骤11,更新全局事务状态并记录日志,同时判断当前全局事务状态是否为终止状态 ;是则,执行步骤12;否则,事务控制服务器继续流转bpmn状态机引擎并执行步骤3;步骤12,事务控制服务器结束全局事务。2.根据权利要求1所述的一种基于saga实现BPMN状态机的方法,其特征在于:步骤1事务信息包括异常恢复策略、服务失败后的重试次数、服务对应的补偿动作,以及补偿失败的重试次数和重试间隔。3. 根据权利要求1所述的一种基于saga实现BPMN状态机的方法,其特征在于:步骤3中,用户利用客户机...

【专利技术属性】
技术研发人员:许祥松林启铵陈军卢佳
申请(专利权)人:中电福富信息科技有限公司
类型:发明
国别省市:

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

1