更新时间:2024-12-16 GMT+08:00
分享

配置函数的异步调用策略

概述

函数可以被同步或异步调用,异步调用场景下,FunctionGraph持久化请求后立即返回,不等待请求最终处理完成,用户无法实时感知请求处理结果。如果您希望异步请求处理失败后重试或者希望获取异步处理结果通知,可通过函数异步配置项进行设置。

应用场景

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

操作步骤

  1. 登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
  2. 选择待配置的函数,单击进入函数详情页。
  3. 选择“设置 > 异步配置”,在“异步配置”页签,单击“配置异步调用”。

    图1 配置异步调用

  4. 填写配置参数,参见如下表1,例如设置目标服务为函数工作流(FunctionGraph)。

    图2 填写配置参数
    表1 参数说明

    参数

    说明

    异步策略配置

    • 最大重试次数:异步调用失败后最大重试次数,默认为1次,取值范围:0-3。
    • 消息最大有效期(s):消息最大存活时长,取值范围:1-86400。

    成功时通知

    目标服务:执行成功时发送通知到以下目标服务

    1. 函数工作流(FunctionGraph)
    2. 对象存储服务(OBS)
    3. 数据接入服务(DIS)
    4. 消息通知服务(SMN)

    失败时通知

    目标服务:执行失败时发送通知到以下目标服务

    1. 函数工作流(FunctionGraph)
    2. 对象存储服务(OBS)
    3. 数据接入服务(DIS)
    4. 消息通知服务(SMN)
    5. 分布式消息服务(RocketMQ)(当前处于公测阶段,仅支持华东-上海一。)

  5. 填写完成后单击“确定”。

    1. 若配置函数异步时,报“用户权限不足”,请添加“FunctionGraph Administrator”权限。具体操作方法请参见创建用户并授权使用FunctionGraph
    2. 异步配置通知到目标服务时,需配置具有目标服务操作权限的函数委托。
    3. 当您在配置异步执行通知目标时,请务必保证不要出现循环调用的情况。例如:您为函数A配置了成功调用时的异步通知目标为函数B,为函数B配置了成功调用时的异步通知目标为函数A,当您异步触发函数A并且执行成功后,则可能出现A—>B—>A......循环调用的情况。
    4. 当异步配置通知到分布式消息(RocketMQ)时,需要函数配置VPC且与通知的RocketMQ实例在同一个VPC中。同时,需要确保RocketMQ实例所在的安全组入方向规则已放通实例的连接端口,否则无法通知消息。(当前处于公测阶段,仅支持华东-上海一。)

配置说明

异步调用目标的配置说明参见表2,异步调用目标的事件内容参见如下示例:

{
        "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!"
}
表2 配置参数说明

参数

说明

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

执行函数返回的原始负载。

触发函数

配置异步调用的函数的返回值的字节数不能大于256KB,否则会返回空值。

  1. 按照操作步骤创建3个函数,分别是test1、test2和test3,test1的异步策略配置如下:

    • 成功时通知
      • 目标服务:选择“函数工作流(FunctionGraph)”。
      • 函数名称:选择“test2”。
      • 版本/别名:默认选择“latest”。
    • 失效时通知
      • 目标服务:选择“函数工作流(FunctionGraph)”。
      • 函数名称:选择“test3”。
      • 版本/别名:默认选择“latest”。

  2. 选择“代码”页签,配置测试事件。

    选择“空白模板”,将配置说明中的异步调用目标的示例代码拷贝到代码区,单击“创建”。

  3. 函数工作流控制台界面右上角选择“工具 > API Explorer”,进入API Explorer页面,然后在左上角选择“函数工作流”。
  4. 在左侧API接口列表中选择“函数调用 > 异步执行函数”,参数配置如下:

    • Region:请保持与步骤1中函数创建时选择的区域一致。
    • function_urn:函数的URN,此处填写test1的URN地址。
    • Body:自定义配置,格式为“string:JSON字符串”,举例“aaa:123”。

    其他参数保持默认,单击“调试”。

    图3 异步执行函数参数配置

查看函数异步执行结果

  1. 返回函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
  2. 如果在触发函数中调试结果执行成功,单击test2函数名称进入详情页;如果调试结果执行失败,单击test3函数名称进入详情页。
  3. 选择“监控 > 日志”,查询函数test2或test3运行日志。

相关文档