将回调详细信息存储在 Firestore 数据库中,停止执行,然后等待特定事件的发生。
深入探索
如需查看包含此代码示例的详细文档,请参阅以下内容:
代码示例
YAML
main:
steps:
- init:
assign:
- pubsub_topic: topic-callback
- storage_bucket: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID") + "-bucket-callback"}
- await_pubsub_message:
call: await_callback_event
args:
event_source: ${pubsub_topic}
result: pubsub_event
- await_storage_bucket:
call: await_callback_event
args:
event_source: ${storage_bucket}
result: storage_event
- return_events:
return:
pubsub_event: ${pubsub_event}
storage_event: ${storage_event}
await_callback_event:
params: [event_source]
steps:
- init:
assign:
- database_root: ${"projects/" + sys.get_env("GOOGLE_CLOUD_PROJECT_ID") + "/databases/(default)/documents/callbacks/"}
- doc_name: ${database_root + event_source}
- execution_id: ${sys.get_env("GOOGLE_CLOUD_WORKFLOW_EXECUTION_ID")}
- firestore_key: ${"exec_" + text.split(execution_id, "-")[0]}
- create_callback:
call: events.create_callback_endpoint
args:
http_callback_method: POST
result: callback_details
- save_callback_url:
call: googleapis.firestore.v1.projects.databases.documents.patch
args:
name: ${doc_name}
updateMask:
fieldPaths: ["${firestore_key}"]
body:
fields:
${firestore_key}:
stringValue: ${callback_details.url}
- log_and_await_callback:
try:
steps:
- log_await_start:
call: sys.log
args:
severity: INFO
data: ${"Started waiting 1hr for an event from source " + event_source}
- await_callback:
call: events.await_callback
args:
callback: ${callback_details}
timeout: 3600
result: callback_request
- log_await_stop:
call: sys.log
args:
severity: INFO
data: ${"Stopped waiting for an event from source " + event_source}
except:
as: e
steps:
- log_error:
call: sys.log
args:
severity: "ERROR"
text: ${"Received error " + e.message}
- delete_callback_url:
call: googleapis.firestore.v1.projects.databases.documents.patch
args:
name: ${doc_name}
updateMask:
fieldPaths: ["${firestore_key}"]
- check_null_event:
switch:
- condition: ${callback_request == null}
return: null
- log_await_result:
call: sys.log
args:
severity: INFO
data: ${callback_request.http_request.body.event}
- return_event:
return: ${callback_request.http_request.body.event}
后续步骤
如需搜索和过滤其他 Google Cloud 产品的代码示例,请参阅 Google Cloud 示例浏览器。