更新时间:2025-08-04 GMT+08:00
分享

配置函数的异步调用策略

在异步调用函数的场景下,FunctionGraph会将请求排队,不等待函数的执行结果,直接向客户端返回响应,这种情况下客户端无法实时感知函数的执行结果。如果需要设置异步请求失败重试或者获取异步请求的结果通知,可以通过设置异步配置实现。

  • 失败重试:用户代码异常造成的失败,FunctionGraph默认不重试。如果函数中有需要重试的场景,例如调用三方服务经常失败,可配置重试提升成功率。
  • 结果通知:FunctionGraph可以将异步函数的执行结果传递给下游服务做进一步处理。例如把执行失败信息保存到OBS,用于后续分析失败原因,或者把执行成功信息推送到DIS或再次触发函数做处理等。

约束与限制

表1 函数异步配置约束限制

限制场景

具体限制

使用异步调用的函数

使用异步调用的函数,返回值的大小不能超过256KB,否则会返回空值。

使用异步配置通知目标服务

请务必保证不要出现循环调用的情况。

例如:函数A配置了成功调用时的异步通知目标为函数B,函数B配置了成功调用时的异步通知目标为函数A,当异步触发函数A并且执行成功后,则可能出现A>B>A......循环调用的情况。

使用异步配置失败时通知分布式消息服务(RocketMQ)

仅支持“华东-上海一”“西南-贵阳一”区域配置。

前提条件

  • 使用异步配置通知目标服务,需配置具有目标服务操作权限的函数委托,配置函数委托详情请参考配置函数的委托权限
  • 使用异步配置失败时通知分布式消息服务(RocketMQ),需要配置函数访问VPC且与通知的RocketMQ实例在同一个VPC中。

    同时,需要确保RocketMQ实例所在的安全组入方向规则已放通实例的连接端口,否则无法通知消息,可参考连接RocketMQ网络要求。(当前处于公测阶段,仅支持华东-上海一、西南-贵阳一。)

配置异步调用策略

  1. 登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
  2. 单击函数的名称,进入函数详情页。
  3. 在“设置”页签下选择“异步配置”。
  4. 在异步配置页面,单击“配置异步调用”,编辑异步配置信息。
    图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。
  5. 单击“确定”保存异步配置。

通知消息结构说明

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!"
}
表3 消息参数说明

参数

说明

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,通过日志可以查询每次异步调用的执行状态。

用户默认没有权限开启异步调用状态持久化,如果需要开启异步调用状态持久化,查看调用记录,请在工单系统提交工单添加白名单。

  1. 登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
  2. 单击函数的名称,进入函数详情页,在“设置”页签下选择“异步配置”。
  3. (如已开通云日志服务,可跳过该步骤)在异步配置页面,单击页面上方说明信息中的“点击开通”,开通云日志服务(LTS)。

    此过程中系统会自动调用LTS接口,在LTS控制台创建日志组(名称为function-async-log-group开头的日志组)和日志流(名称为function-async-log-stream开头的日志流),用户无需手动创建日志组和日志流。

  4. 开通完成后,在页面上单击“配置异步调用”,页面上新增参数“开启异步调用状态持久化”。
  5. 启用“开启异步调用状态持久化”参数,并选择3中自动创建的日志组和日志流。
    图2 开启异步调用状态持久化

  1. 在LTS服务配置日志结构化。
    1. 登录云日志服务LTS控制台,左侧导航栏选择“日志管理”,在日志组列表模块可查看自动创建的日志组和日志流。
      图3 日志组列表

    2. 单击日志流名称,进入日志流详情页。
    3. 在日志流详情页,如图4所示单击右上角的日志设置。
      图4 日志设置

    4. 在设置弹窗中,选择“云端结构化解析”页签,如图5所示配置日志结构化。
      • 场景:选择“分隔符”
      • 选择示例日志:填入“x|x|0|0|0|x”

        此处表示占位符,代表前2个字段为string类型,中间3个字段为long类型,最后1个字段为string类型。

      • 指定分隔符:“|”。
        图5 云端结构化解析

    5. 单击步骤3的“智能提取”智能生成字段,并单击参考表4修改字段名称,修改完成后如图6所示。
      表4 修改字段

      字段名称

      修改后字段

      field1

      function_urn

      field2

      request_id

      field3

      seq_status

      field4

      operation_timestamp

      field5

      error_code

      field6

      error_message

      图6 修改提取字段

    6. 修改完成后单击“保存”。

相关文档

  • 除使用控制台外,函数工作流支持通过API的方式管理函数的异步配置,详情请参见函数异步配置API
  • 若修改异步配置时报“用户权限不足”,请添加“FunctionGraph Administrator”权限,具体操作方法请参见创建用户并授权使用FunctionGraph

相关文档