回调允许工作流执行操作等待其他服务向回调端点发出 请求;该请求将继续执行 工作流。
借助回调,您可以告知工作流指定事件已发生,然后等待该事件而不进行轮询。例如,您可以创建一个工作流,以便在产品再次有货或发货时向您发出通知;或等待以进行人工互动,例如审核订单或验证翻译。
本页面介绍了如何创建工作流来支持回调端点,并等待来自外部进程的 HTTP 请求到达该端点。您还可以 使用回调和 Eventarc 触发器等待事件。
回调需要使用两个标准库内置函数:
events.create_callback_endpoint- 创建需要指定 HTTP 方法的回调端点events.await_callback- 等待在给定端点接收回调
创建接收回调请求的端点
创建一个可以接收到达相应端点的 HTTP 请求的回调端点。
- 按照步骤创建新的工作流,或选择要更新的现有工作流,但暂时不要部署。
- 在工作流的定义中,添加一个步骤来创建回调端点:
YAML
- create_callback: call: events.create_callback_endpoint args: http_callback_method: "METHOD" result: callback_details
JSON
[ { "create_callback": { "call": "events.create_callback_endpoint", "args": { "http_callback_method": "METHOD" }, "result": "callback_details" } } ]
将
METHOD替换为所需的 HTTP 方法,即GET、HEAD、POST、PUT、DELETE、OPTIONS或PATCH之一。默认值为POST。结果是映射
callback_details,其中包含一个用于存储已创建端点的网址的url字段。回调端点现在可以使用 指定的 HTTP 方法接收传入请求。创建的端点的网址可用于从工作流外部的进程触发 回调;例如,将网址传递给 Cloud Run 函数。
- 在工作流的定义中,添加一个步骤来等待回调请求:
YAML
- await_callback: call: events.await_callback args: callback: ${callback_details} timeout: TIMEOUT result: callback_request
JSON
[ { "await_callback": { "call": "events.await_callback", "args": { "callback": "${callback_details}", "timeout": TIMEOUT }, "result": "callback_request" } } ]
将
TIMEOUT替换为工作流应等待请求的秒数上限。默认值为 43200(12 小时)。如果在收到请求之前超过此时间,则会引发TimeoutError。请注意,执行时长有上限。如需了解详情,请参阅 请求限制。
前面
callback_details映射从前面create_callback步骤作为参数传递。 - 部署您的工作流以完成创建或更新。
收到请求后,请求的所有详细信息都会存储在
callback_request映射中。然后,您可以访问整个 HTTP 请求,包括其标头、正文以及任何查询参数的query映射。例如:YAML
http_request: body: headers: {...} method: GET query: {} url: