更新时间:2023-07-05 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. 填写完成后单击“确定”。

    1. 若配置函数异步时,报“用户权限不足”,请添加“FunctionGraph Administrator”权限。具体操作方法请参见创建用户并授权使用FunctionGraph
    2. 异步配置通知到目标服务时,需配置具有目标服务操作权限的函数委托。
    3. 当您在配置异步执行通知目标时,请务必保证不要出现循环调用的情况。例如:您为函数A配置了成功调用时的异步通知目标为函数B,为函数B配置了成功调用时的异步通知目标为函数A,当您异步触发函数A并且执行成功后,则可能出现A—>B—>A......循环调用的情况。

配置说明

异步调用目标的配置说明参见表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

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