函数计算接收异步调用请求后,将请求持久化后会立即返回响应,无需等待请求执行完成。如需要保留执行失败且超过最大重试次数被丢弃的请求,或通知下游异步调用结果,可以通过配置结果回调功能实现。配置异步目标服务后,异步调用请求执行完成,函数计算根据执行结果自动回调对应的服务。
功能原理
结果回调流程如下图所示。
适用场景
- 保存丢弃的事件供后续使用:当异步请求执行失败,并且按照指定的策略重试后仍然失败,函数计算将丢弃该请求。如果配置了失败目标,函数计算将自动把失败请求的上下文信息推送到另一个函数,执行自定义的错误处理逻辑。
- 自动通知下游服务执行结果:请求执行成功后,如果配置了成功目标,函数计算系统会自动将成功请求的上下文信息推送到下游目标服务。
支持的异步调用目标服务
当为函数配置了异步调用目标,并且异步调用后的结果符合条件时,函数计算会将请求上下文和数据推送至对应服务。可以针对不同函数、别名和版本配置不同的目标服务。目前支持的异步调用目标服务只有函数计算。
异步调用目标服务的配置说明如下:
异步调用目标的事件内容:函数计算作为函数异步调用目标时,事件内容示例如下。
{
"timestamp": 1660120276975,
"requestContext": {
"requestId": "xxx",
"host": "xxx.fc-huadong1.ctyun.cn",
"uri": "/abc/def",
"approximateInvokeCount": 3
},
"requestPayload": "",
"responseContext": {
"statusCode": 200,
},
"responsePayload": ""
}
参数说明如下:
参数 | 说明 |
---|---|
timestamp | 调用时间戳。 |
requestContext | 请求上下文。 |
requestContext.requestId | 异步调用的请求ID。 |
requestContext.host | 异步执行的函数域名。 |
requestContext.uri | 异步执行的函数uri。 |
requestContext.approximateInvokeCount | 异步调用的执行次数。当该值大于1时,说明函数计算对您的函数进行了重试。 |
requestPayload | 请求函数的原始负载。 |
responseContext | 返回上下文。 |
responseContext.statusCode | 调用函数的返回码。 |
responsePayload | 执行函数返回的原始负载。 |
避免循环调用
当您在配置异步执行目标时,请务必保证不要出现循环调用的情况。例如,您为函数A配置了成功调用时的异步目标为函数B,为函数B配置了成功调用时的异步目标为函数A。当您异步触发函数A并且执行成功后,则可能出现A到B,再到A的循环调用的情况。
配置异步调用目标服务
- 登录函数计算控制台,在左侧导航栏,单击函数。
- 在函数页面,单击目标函数。
- 在函数配置页面,选择配置页签。
- 在左侧导航栏,选择异步配置页签,按需配置参数信息。
- 配置成功目标
- 在成功目标区域,单击编辑。
- 在成功目标面板,成功时调用其他服务选择启用,然后配置当函数成功执行后将需要发送结果的目标云服务。单击部署
- 配置失败目标
- 在失败目标区域,单击编辑。
- 在失败目标面板,失败时调用其他服务选择启用,然后配置当函数执行失败后需要发送消息的目标云服务。
- 配置失败目标的参数,请参见配置成功目标。
- 单击部署。
- 配置成功目标