配置函数的异步调用策略-j9九游会登录
在异步调用函数的场景下,functiongraph会将请求排队,不等待函数的执行结果,直接向客户端返回响应,这种情况下客户端无法实时感知函数的执行结果。如果需要设置异步请求失败重试或者获取异步请求的结果通知,可以通过设置异步配置实现。
- 失败重试:用户代码异常造成的失败,functiongraph默认不重试。如果函数中有需要重试的场景,例如调用三方服务经常失败,可配置重试提升成功率。
- 结果通知:functiongraph可以将异步函数的执行结果传递给下游服务做进一步处理。例如把执行失败信息保存到obs,用于后续分析失败原因,或者把执行成功信息推送到dis或再次触发函数做处理等。
约束与限制
|
限制场景 |
具体限制 |
|---|---|
|
使用异步调用的函数 |
使用异步调用的函数,返回值的大小不能超过256kb,否则会返回空值。 |
|
使用异步配置通知目标服务 |
请务必保证不要出现循环调用的情况。 例如:函数a配置了成功调用时的异步通知目标为函数b,函数b配置了成功调用时的异步通知目标为函数a,当异步触发函数a并且执行成功后,则可能出现a>b>a......循环调用的情况。 |
|
使用异步配置失败时通知分布式消息服务(rocketmq) |
仅支持“华东-上海一”、“西南-贵阳一”区域配置。 |
前提条件
配置异步调用策略
- 登录,在左侧的导航栏选择“函数 > 函数列表”。
- 单击函数的名称,进入函数详情页。
- 在“设置”页签下选择“异步配置”。
- 在异步配置页面,单击“配置异步调用”,编辑异步配置信息。
图1 填写配置参数
表2 异步配置参数说明 参数
说明
异步策略配置
- 最大重试次数:异步调用失败后最大重试次数,默认为3次,取值范围:0-3。
- 消息最大有效期(s):消息最大存活时长,取值范围:1-86400秒。
- 开启异步调用状态持久化:开通云日志服务(lts)后显示该配置开关,具体配置方式请参考配置异步调用状态持久化。
成功时通知
目标服务:函数执行成功时发送通知到以下目标服务。
- 函数工作流(functiongraph)
- 函数名称:选择接收通知消息的函数名称。
- 版本/别名:选择函数对应的版本或别名。
- 对象存储服务(obs)
- 目标桶目录:选择存放通知消息的obs桶路径。
- 对象前缀目录:输入对象前缀目录,以筛选通知消息要存放的对象文件。
- 对象过期时间(天):过期后的对象会被obs服务端自动清理。单位:天,取值范围:0-365,0表示不过期。
- 数据接入服务(dis)
目标通道:选择接收通知消息的目标通道。
- 消息通知服务(smn)
主题名称:选择接收通知消息的主题。
失败时通知
目标服务:函数执行失败时发送通知到以下目标服务。
- 函数工作流(functiongraph)
- 函数名称:选择接收通知消息的函数名称。
- 版本/别名:选择函数对应的版本或别名。
- 对象存储服务(obs)
- 目标桶目录:选择存放通知消息的obs桶路径。
- 对象前缀目录:输入对象前缀目录,以筛选通知消息要存放的对象文件。
- 对象过期时间(天):过期后的对象会被obs服务端自动清理。单位:天,取值范围:0-365,0表示不过期。
- 数据接入服务(dis)
目标通道:选择接收通知消息的目标通道。
- 消息通知服务(smn)
主题名称:选择接收通知消息的主题。
- 分布式消息服务 rocketmq版(rocketmq)(仅支持华东-上海一、西南-贵阳一区域配置。)
- 实例:选择接收通知消息的rocketmq实例。
- topic:选择接收通知消息的topic。
- 单击“确定”保存异步配置。
通知消息结构说明
functiongraph向目标发送异步调用通知的消息示例如下所示。
{
"timestamp": "2020-08-20t12:00:00.000z 08:00",
"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 |
执行函数返回的原始负载。 |
配置异步调用状态持久化
异步调用状态持久化可以提供更好的可观测性,开启后函数的异步调用日志会上报到lts,通过日志可以查询每次异步调用的执行状态。
用户默认没有权限开启异步调用状态持久化,如果需要开启异步调用状态持久化,查看调用记录,请在提交工单添加白名单。
- 登录,在左侧的导航栏选择“函数 > 函数列表”。
- 单击函数的名称,进入函数详情页,在“设置”页签下选择“异步配置”。
- (如已开通云日志服务,可跳过该步骤)在异步配置页面,单击页面上方说明信息中的“点击开通”,开通云日志服务(lts)。
此过程中系统会自动调用lts接口,在lts控制台创建日志组(名称为function-async-log-group开头的日志组)和日志流(名称为function-async-log-stream开头的日志流),用户无需手动创建日志组和日志流。
- 开通完成后,在页面上单击“配置异步调用”,页面上新增参数“开启异步调用状态持久化”。
- 启用“开启异步调用状态持久化”参数,并选择3中自动创建的日志组和日志流。
图2 开启异步调用状态持久化
- 在lts服务配置日志结构化。
- 登录云日志服务lts控制台,左侧导航栏选择“日志管理”,在日志组列表模块可查看自动创建的日志组和日志流。
图3 日志组列表
- 单击日志流名称,进入日志流详情页。
- 在日志流详情页,如图4所示单击右上角的日志设置。
图4 日志设置
- 在设置弹窗中,选择“云端结构化解析”页签,如图5所示配置日志结构化。
- 场景:选择“分隔符”。
- 选择示例日志:填入“x|x|0|0|0|x”。
此处表示占位符,代表前2个字段为string类型,中间3个字段为long类型,最后1个字段为string类型。
- 指定分隔符:“|”。
图5 云端结构化解析
- 单击步骤3的“智能提取”智能生成字段,并单击
参考表4修改字段名称,修改完成后如图6所示。
表4 修改字段 字段名称
修改后字段
field1
function_urn
field2
request_id
field3
seq_status
field4
operation_timestamp
field5
error_code
field6
error_message
图6 修改提取字段
- 修改完成后单击“保存”。
- 登录云日志服务lts控制台,左侧导航栏选择“日志管理”,在日志组列表模块可查看自动创建的日志组和日志流。
相关文档
- 除使用控制台外,函数工作流支持通过api的方式管理函数的异步配置,详情请参见。
- 若修改异步配置时报“用户权限不足”,请添加“functiongraph administrator”权限,具体操作方法请参见创建用户并授权使用functiongraph。
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨