异常
场景介绍
异常主要是针对有特殊需求的用户,在服务编排执行异常时,对特定的异常特殊化处理。
默认情况下,服务编排的执行过程中的**全部异常**,都会以抛出异常的方式终止执行,并执行回滚(在事务范围内)。 在此基础上,如果存在对异常的客制化处理,可以尝试使用「自定义异常处理规则」功能。
自定义异常处理规则
用户可以对编排中的个别节点,进行特殊的异常处理。 如果未设置任何内容,则默认只要发生任一异常,都会抛出异常并终止编排执行。
异常捕获
异常捕获主要分为一下两种
- 常规:捕获特定异常,并执行对应的处理策略
- 高级:通过条件表达式的方式同时对多个异常进行捕获,并执行统一的处理策略
「HTTP请求」除了捕获异常,还可以捕获接口返回的状态码(response status),仅在"高级"模式中可以设置
处理策略
处理策略主要分为以下三种:
- 终止+回滚 (默认):即抛出异常,并终止编排执行
- 继续:忽略指定异常,继续往下执行
- 重试:发生指定异常是,节点重新执行,直到执行成功或重试超过次数 在这里需要注意的有2点:
- 处理策略优先会执行"重试",重试之后还是异常的话,会执行"继续"或者"终止+回滚"
- 「终止+回滚」策略如果发生在事务容器外,会直接终止执行并抛出异常;如果发生在事务容器内,会先进行事务回滚,然后再终止执行并抛出异常。关于事务相关可以看此文档。
节点异常梳理
下面是AI速搭目前定义的各节点异常,用户可以对以下异常做一些自定义的处理
节点 异常 描述 编码转换 公式解析异常 变量值是通过公式获取的,如果公式解析出错导致变量取值失败会触发此异常 编码异常 执行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代码片段时,触发的异常
自定义异常事件/动作
自定义异常事件/动作可以理解为异常分支,当异常发生时,需要执行的一系列动作,如发消息或邮件通知等等。
默认关闭不执行,如果开启默认对所有异常都会执行此动作,可以在"条件表达式"中自定义哪些异常需要执行自定义异常事件。
注意:自定义异常处理的异常捕获和上面提到的"异常捕获和处理策略"中的捕获不相同,两部分的异常捕获是单独的
异常执行顺序
当某个节点A抛出异常(ex1)时,具体会按照以下方式执行:
- 判断节点A中是否有对异常ex1的"捕获+重试",如果有则重试
- 当重试超过次数/没有重试,判断节点A中是否有针对异常ex1的「自定义异常事件/动作」,如果有则执行事件/动作
- 以上2步完成后,判断节点中是否有对异常ex1的处理策略("抛出异常"或"重试");如果抛出异常,则终止编排执行后将异常抛出;如果继续,则忽略异常往下执行