函数计算接收异步调用请求后,将请求持久化后会立即返回响应,无需等待请求执行完成。如需要保留执行失败且超过最大重试次数被丢弃的请求,或通知下游异步调用结果,可以通过配置结果回调功能实现。配置异步目标服务后,异步调用请求执行完成,函数计算根据执行结果自动回调对应的服务。
功能原理
结果回调流程如下图所示。
适用场景
-
保存丢弃的事件供后续使用
当异步请求执行失败,并且按照指定的策略重试后仍然失败,函数计算将丢弃该请求。如果配置了失败目标,函数计算将自动把失败请求的上下文信息推送到另一个函数,执行自定义的错误处理逻辑。
-
自动通知下游服务执行结果
请求执行成功后,如果配置了成功目标,函数计算系统会自动将成功请求的上下文信息推送到下游目标服务。
支持的异步调用目标服务
当为函数配置了异步调用目标,并且异步调用后的结果符合条件时,函数计算会将请求上下文和数据推送至对应服务。可以针对不同函数、别名和版本配置不同的目标服务。目前支持的异步调用目标服务只有函数计算。
异步调用目标服务的配置说明如下:
异步调用目标的事件内容
函数计算作为函数异步调用目标时,事件内容示例如下。
{
"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的循环调用的情况。
配置异步调用目标服务
说明配置异步调用目标前,请先创建函数。
-
登录函数计算控制台,在左侧导航栏,单击函数。
-
在函数页面,单击目标函数。
-
在函数配置页面,选择配置页签。
-
在左侧导航栏,选择异步配置页签,按需配置参数信息。
-
配置成功目标
-
在成功目标区域,单击编辑。
在成功目标面板,成功时调用其他服务选择启用,然后配置当函数成功执行后将需要发送结果的目标云服务。参数信息如下:
参数 说明 目标服务 函数计算。当目标服务选择的是函数计算时,需配置以下参数信息:
函数名称:指定目标函数的名称。
版本或别名:指定函数的别名或版本。 -
单击部署。
-
-
配置失败目标
-
在失败目标区域,单击编辑。
-
在失败目标面板,失败时调用其他服务选择启用,然后配置当函数执行失败后需要发送消息的目标云服务。
配置失败目标的参数,请参见配置成功目标。
-
单击部署。
-
-
常见问题
如何触发函数的异步调用?
可以通过以下方式对函数计算的函数发起一次异步调用。
- 登录函数计算控制台,找到目标函数,然后在测试页,勾选我想通过异步的方式进行调用。
- 创建HTTP触发器,触发HTTP调用,设置参数x-fc-invocation-type的值为Async。
- 调用OpenAPI接口,设置参数xFcInvocationType的值为Async。
- 创建支持异步调用的触发器异步触发函数。
后续操作
如果希望获得函数异步请求各个阶段的状态,可通过开启任务模式来实现,具体信息参见异步任务。