Skip to main content

异常

场景介绍

异常主要是针对有特殊需求的用户,在服务编排执行异常时,对特定的异常特殊化处理。

默认情况下,服务编排的执行过程中的**全部异常**,都会以抛出异常的方式终止执行,并执行回滚(在事务范围内)。 在此基础上,如果存在对异常的客制化处理,可以尝试使用「自定义异常处理规则」功能。 image

自定义异常处理规则

用户可以对编排中的个别节点,进行特殊的异常处理。 如果未设置任何内容,则默认只要发生任一异常,都会抛出异常并终止编排执行。 image

异常捕获

异常捕获主要分为一下两种

  • 常规:捕获特定异常,并执行对应的处理策略
  • 高级:通过条件表达式的方式同时对多个异常进行捕获,并执行统一的处理策略

「HTTP请求」除了捕获异常,还可以捕获接口返回的状态码(response status),仅在"高级"模式中可以设置

image

处理策略

处理策略主要分为以下三种:

  • 终止+回滚 (默认):即抛出异常,并终止编排执行
  • 继续:忽略指定异常,继续往下执行
  • 重试:发生指定异常是,节点重新执行,直到执行成功或重试超过次数 image 在这里需要注意的有2点:
  1. 处理策略优先会执行"重试",重试之后还是异常的话,会执行"继续"或者"终止+回滚"
  2. 「终止+回滚」策略如果发生在事务容器外,会直接终止执行并抛出异常;如果发生在事务容器内,会先进行事务回滚,然后再终止执行并抛出异常。关于事务相关可以看此文档

节点异常梳理

下面是爱速搭目前定义的各节点异常,用户可以对以下异常做一些自定义的处理

节点异常描述
编码转换公式解析异常变量值是通过公式获取的,如果公式解析出错导致变量取值失败会触发此异常
编码异常执行BASE64编码时出现的异常
解码异常执行BASE64解码时出现的异常
日期格式化源变量取值异常日期格式化中,源变量是空或者非日期,会触发此异常
格式化异常日期格式化中,执行格式化产生的异常
数据映射数据来源定义异常数据映射的源变量取值或者格式定义错误时,会触发此异常
映射异常执行数据映射过程中产生的异常,但如果仅是映射不到对应数据不会触发
新增记录初始化参数解析异常字段复制过程中,公式解析异常时触发
数据库连接异常数据源连接不通时触发
新增记录异常执行新增记录时,数据库触发的异常
删除记录筛选条件解析异常解析筛选条件中的条件表达式时触发的异常
数据库连接异常数据源连接不通时触发
删除记录异常执行删除记录时,数据库触发的异常
更新记录初始化参数解析异常字段复制过程中,公式解析异常时触发
筛选条件解析异常解析筛选条件中的条件表达式时触发的异常
数据库连接异常数据源连接不通时触发
更新记录异常执行更新记录时,数据库触发的异常
查询记录筛选条件解析异常解析筛选条件中的条件表达式时触发的异常
数据库连接异常数据源连接不通时触发
查询记录异常执行查询记录时,数据库触发的异常
HTTP请求认证鉴权异常HTTP中的认证鉴权获取token时触发的异常
请求异常执行http请求调用时,触发的异常
返回适配异常接口请求后,对请求体做"返回结果转换","转换模式"或"文件下载"等时,触发的异常
自定义状态码异常用户在"高级"异常捕获中,对Http请求返回的特定状态码进行触发异常
API中心节点API中心节点不存在或禁用API中心节点对应的服务编排已经被删除或者被禁用时触发
API中心节点存在循环引用API中心调用存在循环引用时触发
入参初始化异常执行API中心节点前,解析生成执行对应API中心节点的输入参数时触发的异常
API节点执行异常执行API中心节点时触发
调用流程流程不存在或禁用需要调用的流程已经被删除或者被禁用时触发
连接器连接器参数解析异常执行连接器前,解析连接器中传递的参数时触发
连接器执行异常执行连接器时触发
发送邮件收件人定义异常收件人为空或定义格式有问题时触发
发送内容解析异常在解析发送内容中的变量、静态文件等时触发的异常
发送邮件异常执行发送邮件的时候触发的异常
发送消息接收人定义错误接收人为空或定义格式有问题时触发
消息内容解析异常在解析发送消息中的变量时触发的异常
发送消息异常执行发送消息的时候触发的异常
数据源SQL数据源连接异常数据源连接不通时触发
SQL语句和参数解析异常解析SQL中的参数或SQL语句的格式有问题时触发此异常
SQL执行异常执行SQL时,数据库触发的异常
JS代码JS执行异常执行JS代码片段时,触发的异常

自定义异常事件/动作

自定义异常事件/动作可以理解为异常分支,当异常发生时,需要执行的一系列动作,如发消息或邮件通知等等。

默认关闭不执行,如果开启默认对所有异常都会执行此动作,可以在"条件表达式"中自定义哪些异常需要执行自定义异常事件。 image

注意:自定义异常处理的异常捕获和上面提到的"异常捕获和处理策略"中的捕获不相同,两部分的异常捕获是单独的 image

异常执行顺序

当某个节点A抛出异常(ex1)时,具体会按照以下方式执行:

  1. 判断节点A中是否有对异常ex1的"捕获+重试",如果有则重试
  2. 当重试超过次数/没有重试,判断节点A中是否有针对异常ex1的「自定义异常事件/动作」,如果有则执行事件/动作
  3. 以上2步完成后,判断节点中是否有对异常ex1的处理策略("抛出异常"或"重试");如果抛出异常,则终止编排执行后将异常抛出;如果继续,则忽略异常往下执行