流状态重试和错误处理
由于各种原因,状态可能会遇到运行时错误:
- 短暂性错误,如网络中断和拥塞
- JSON路径解析错误
默认情况下,当一个状态遇到运行时错误时,整个ZIS流将失败。
行动而且地图的状态支持错误处理抓
块。你可以使用抓
块,以避免在状态遇到错误时整个ZIS流失败。看到使用Catch块。
在某些情况下,ZIS还尝试重试失败的流。看到ZIS流重试逻辑。
使用Catch块
一个抓
block指定当Action或Map状态遇到运行时错误时要运行的回退状态。例子:
“亚博Zendesk。GetTickets”:{
“类型”:“行动”,
“ActionName”:“子:集成:行动:zendesk.get_tic亚博kets”,
“抓”:[
{
“ErrorEquals”:[”的国家。所有的“],
“下一个”:“AnotherState”
}
],
“下一个”:“NextState”
}
Catch块支持的属性
对象中的抓
数组支持以下属性。
的名字 | 类型 | 强制性的 | 描述 |
---|---|---|---|
ErrorEquals | 字符串数组 | 真正的 | 错误名称数组。唯一有效的值是“States”。所有的“,which matches all error names |
下一个 | 数量 | 真正的 | 如果操作或映射状态遇到运行时错误且无法重试,则运行的回退状态 |
ResultPath | 数量 | 假 | 参考路径用于存储状态输出。ZIS流的后续状态可以通过此路径访问输出。默认为"$",它将状态的输入替换为输出 |
ZIS流重试逻辑
一个正在运行的ZIS流将在以下情况下重试:
在重试期间,整个流将从头开始运行。确保您的用例和流逻辑能够说明这一点。根据重试场景不同,重试间隔时间也不同。无论如何,ZIS将只尝试运行流四次:初始尝试和最多三次重试尝试。
如果流在a上结束失败状态,ZIS将不会重试流。
在速率限制后重试ZIS流
HTTP状态码429表示“请求太多”。当API返回带有此代码的错误时,这意味着帐户太快地向API发送了太多的请求。这被称为速率限制。
一些api包括Retry-After
报头中出现429错误。这个报头指定在重试API调用之前应该等待多长时间。报头可以提供等待的秒数或重试调用的日期和时间。
如果流中基于http的操作接收到429错误响应并且流失败,则流将基于Retry-After
时间间隔。
Retry-After 时间间隔 |
流重试行为 |
---|---|
小于120秒 | 重试后,Retry-After 时间间隔 |
120秒或以上 | 120秒后重试 |
没有Retry-After 头 |
30-330秒后重试。如果重试失败,请在60-360秒后尝试第二次重试。如果第二次重试失败,请在120-420秒后重试第三次,也就是最后一次重试。 |
在服务器错误后重试ZIS流
一个500的HTTP状态码意味着API的web服务器出了问题。
如果流中基于http的操作接收到500错误并且流失败,流将在30-330秒后重试。如果重试失败,ZIS会在60-360秒后尝试第二次重试。如果第二次重试失败,ZIS将在120-420秒后尝试第三次和最后一次重试。
手动重试ZIS流
若要对其他类型的错误手动重试流,请使用抓
块在Action状态下捕获错误,然后在Choice状态下检查特定的错误代码。例子:
{
“StartAt”:“亚博Zendesk。GetTicket”,
“州”:{
“亚博Zendesk。DoSomething”:{
“类型”:“行动”,
“ActionName”:“子:YOUR_INTEGRATION_NAME:行动:zendes亚博k。YOUR_ACTION_NAME”,
“参数”:{
“ticketId美元。”:“{{$ .input.ticket.id}}”
},
“抓”:[
{
“评论”:“ZIS只支持捕获所有错误类型,即状态。所有的“,
“ErrorEquals”:[”的国家。所有的“],
“下一个”:“CheckErrorType”
}
],
“ResultPath”:“.do_something_result美元”,
“结束”:真正的
},
“CheckErrorType”:{
“评论”:"检查所捕获的错误是否为404",
“类型”:“选择”,
“选择”:[
{
“变量”:“美元。导致“,
“StringEquals”:由于状态代码:404,外部操作失败,
“下一个”:“log.errorCaught.404”
}
],
“默认”:“log.errorCaught.other”
},
“log.errorCaught.404”:{
“评论”:“使用此分支处理404错误”,
“类型”:“成功”,
“消息”:“我发现了一个404错误”
},
“log.errorCaught.other”:{
“评论”:“使用这个分支来处理其他错误”,
“类型”:“成功”,
“消息”:“我发现了一个非404错误”
}
}
}