概述
函数可以被同步或异步调用,异步调用场景下,FunctionGraph持久化请求后立即返回,不等待请求最终处理完成,用户无法实时感知请求处理结果。如果您希望异步请求处理失败后重试或者希望获取异步处理结果通知,可通过函数异步配置项进行设置。
应用场景
- 失败重试:用户代码异常造成的失败,FunctionGraph默认不重试。如果函数中有需要重试的场景,例如调用三方服务经常失败,可配置重试提升成功率。
- 结果通知:FunctionGraph可自动通知异步函数的执行结果给下游服务做进一步处理。例如执行失败信息保存到OBS,后续分析失败原因;执行成功信息推送到DIS或再次触发函数做处理等。
操作步骤
1、登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
2、选择待配置的函数,单击进入函数详情页。
3、选择“设置 > 异步配置”,在“异步配置”页签,单击“配置异步调用”。
配置异步调用
4、填写配置参数,参见如下表,例如设置目标服务为函数工作流(FunctionGraph)。
填写配置参数
参数说明
参数 | 说明 |
---|---|
异步策略配置 | 最大重试次数:异步调用失败后最大重试次数,默认为1次,取值范围:0-3。 消息最大有效期(s):消息最大存活时长,取值范围:1-86400。 |
成功时通知 | 目标服务:执行成功时发送通知到以下目标服务 1.函数工作流(FunctionGraph) 2.对象存储服务(OBS) 3.消息通知服务(SMN) |
失败时通知 | 目标服务:执行失败时发送通知到以下目标服务 1.函数工作流(FunctionGraph) 2.对象存储服务(OBS) 3.消息通知服务(SMN) |
5、填写完成后单击“确定”。
说明1. 异步配置通知到目标服务时,需配置具有目标服务操作权限的函数委托。
2. 当您在配置异步执行通知目标时,请务必保证不要出现循环调用的情况。例如:您为函数A配置了成功调用时的异步通知目标为函数B,为函数B配置了成功调用时的异步通知目标为函数A,当您异步触发函数A并且执行成功后,则可能出现A—>B—>A......循环调用的情况。
配置说明
异步调用目标的事件内容参见如下示例:
{
"timestamp": "2020-08-20T12:00:00.000Z",
"request_context": {
"request_id": "1167bf8c-87b0-43ab-8f5f-26b16c64f252",
"function_urn": "urn:fss:xx-xxxx-x:xxxxxxx:function:xxxx:xxxx:latest",
"condition": "",
"approximate_invoke_count": 0
},
"request_payload": "",
"response_context": {
"status_code": 200,
"function_error": ""
},
"response_payload": "hello world!"
}
异步调用目标的配置说明参见下表:
配置参数说明
参数 | 说明 |
---|---|
timestamp | 调用时间戳。 |
request_context | 请求上下文。 |
request_context.request_id | 异步调用的请求ID。 |
request_context. function_urn | 异步执行的函数URN。 |
request_context.condition | 调用错误类别。 |
request_context. approximate_invoke_count | 异步调用的执行次数。当该值大于1时,说明函数计算对您的函数进行了重试。 |
request_payload | 请求函数的原始负载。 |
response_context | 返回上下文。 |
response_context.statusCode | 调用函数的返回码(系统)。当该返回码不为200时,说明出现了系统错误。 |
response_context.function_error | 调用错误信息。 |
response_payload | 执行函数返回的原始负载。 |