如何通过服务流程进行接口幂等与重试

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

如何通过服务流程进行接口幂等与重试


服务流程是集成云推出的面向复杂集成场景的低代码服务编排工具,能够把已有的集成对象、集成方案、消息服务、API接口等集成资源,通过流程化设计编排成全新的应用服务,以支持更加复杂的业务场景。


例如基础数据分发到多个系统、数据消费需要从多源取数、基于某个数据参数处理不同的集成过程等等。


为了帮助大家快速掌握服务流程的使用方法,我们推出了系列文章,通过11个典型案例向大家介绍服务流程的高级技巧。


在上期集成服务流程典型案例系列文章中,我们为大家介绍了服务流程的第7个典型案例:如何通过服务流程进行异常处理与状态通知


本期,小编继续为大家介绍第8个案例:如何通过服务流程进行接口幂等与重试,主要包括以下2个要点:


  • 云之家幂等与重试场景介绍;

  • 通过幂等流程完成人员新增、更新与重试。




需求场景介绍


以云之家人员查询、新增、更新的API为例。作为服务流程的事件触发节点,苍穹的人员实体进行保存操作后,将该人员的手机号作为入参调用云之家人员查询API。


然后,根据查询结果分别调用云之家人员的新增和更新API,从而达到幂等的效果。


此外,在调用后继续根据返回结果判断是否继续重新调用,从而达到重试的效果。


具体的流程如下图所示:


流程解析


流程属性与变量配置


由于需要监听实体上的事件,应设置服务流程的【启动方式】为“事件触发”。


流程属性配置


在【依赖资源】下将取数集成对象(数据来源)和需要调用的外部系统API作为资源引入服务流程中。


依赖资源配置


详细节点配置


该案例所涉及的流程节点如下:


流程节点概览


接下来,小编为大家详细讲解各流程节点的配置方法。


3.1 开始节点


在【开始】节点配置需要监听的【集成对象(事件源)】和相应的【单据事件】,以及需要取出的字段,并将获取到的数据赋值给流程变量“人员(src)”。


开始节点基本信息配置

取值字段示例


3.2 字段映射节点


通过字段映射节点配置流程变量“src”和“tar”之间的映射关系,将流程变量“src”的数据赋值给流程变量“tar”。


字段映射节点基本信息配置

字段映射配置示例


3.3 获取查询变量节点


通过脚本节点,将流程变量“tar”中的属性赋值给流程变量“phones”,以供下一步调用API进行查询操作。


获取查询变量节点配置示例


3.4 查询人员节点


通过API节点调用查询接口,将获取到的数据赋值给流程变量“query_result”。


查询人员节点配置示例


3.5 新增人员节点


依据上一步查询到的结果,当人员结果不存在时调用新增人员接口。脚本如下:


var persons = [tar];
//云之家不存在此人员,走新增
result = add_person(persons);
if(result[0].msgCode != 209){
    throw "新增人员失败:" + result[0].error;
}else{
  message = "苍穹人员: " + tar.name +" 新增成功。";
}


3.6 更新人员节点


判断查询人员得到的结果是否存在,当人员存在时调用更新人员接口。脚本如下:


//云之家存在此人员,走更新
tar.openId = query_result[0].openId;
result = update_person(persons);
if(result[0].msgCode != 209){
  throw "更新人员失败:" + result[0].error;
}else{
  message = "苍穹人员:" + tar.name +" 更新成功。";
}


3.7 失败次数递增节点


通过错误转移节点,捕获调用更新/查询API返回的异常结果,在后续的脚本节点中对重试次数进行处理并构造异常信息。脚本如下:


retry_num_add++;
if(retry_num > 3){
  message = "苍穹人员 " + tar.name +" 同步至云之家失败。错误信息:" + result[0].msg;
}


新增人员重试


在普通转移配置中添加条件:当重试次数小于等于3时,流转回时间等待节点后,继续调用人员查询API,再根据查询结果判断是继续调用插入API还是发送通知终止流程;当重试次数大于3时执行后面的通知发送节点。


                                                      回调转移                              继续流转


更新人员重试的脚本如下:


retry_num_update++;
if(retry_num > 3){
  message = "苍穹人员 " + tar.name +" 同步至云之家失败。错误信息:" + result[0].msg;
}

更新人员重试


在普通转移中添加条件,当重试次数小于等于3时流转回时间等待节点后继续调用人员更新API;当重试次数大于3时执行后面的通知发送节点。


3.8 时间等待节点


在每次API调用失败时,需要新增时间等待节点,防止因网络问题等导致的异常。


时间等待节点配置示例


3.9 发送通知节点


在通知发送节点可以配置具体的消息接收系统和消息接收人,并且在消息设置中可以引用服务流程变量,格式为“#{变量名}”。


发送通知节点配置示例


3.10 节点重试


除了按照上述流程配置重试外,还可以单独在节点上配置重试信息。其中,流程重试可以灵活设置判断逻辑,且可以对流程变量进行处理。


节点重试可以在单节点(如脚本节点)配置重试前提重试策略。当流程实例运行到该节点抛出异常时,根据重试策略自动重试。


如图,当抛出的异常信息包含“超时”两个字的时候,将间隔5秒、30秒、300秒自动重试。


节点重试配置示例


参考资料


更多关于集成服务云的知识,可参考下述资料:


集成服务流程操作指南





#往期推荐#


# 如何使用服务流程进行基础资料初始化

# 如何在服务流程中进行API集成

# 如何在服务流程中使用消息集成

# 如何使用服务流程对启动方案失败进行自动补偿

# 如何通过服务流程进行单据反写


# 如何使用服务流程进行数据一致性补偿同步


# 如何通过服务流程进行异常处理与状态通知


更多精彩内容,“码”上了解!↓


如何通过服务流程进行接口幂等与重试

服务流程是集成云推出的面向复杂集成场景的低代码服务编排工具,能够把已有的集成对象、集成方案、消息服务、API接口等集成资源,通过流程...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息