使用 Cloud Tasks 将工作流执行加入队列

您可以使用 Cloud Tasks 将工作流加入队列并执行 异步执行。

Cloud Tasks 提供以下控件:

  • 安排特定的传送时间
  • 管理传送速率
  • 配置重试行为
  • 访问和管理队列中的各项任务
  • 启用任务重复信息删除

例如,这些控件可用于管理触发工作流且可能会意外超出工作流限制的请求。修改者 配置具有速率限制和重试的 Cloud Tasks 队列; 您可以确保所有此类请求都能执行工作流。

如需了解详情,请参阅了解 Cloud Tasks

请注意以下几点:

  • 您应根据 Execution API write 请求的 Workflows 限制来设置速率限制。如果 则可以在 Google Cloud 控制台中申请增加大部分配额。 详细了解配额增加申请

  • Cloud Tasks 旨在提供“至少一次”交付;不过,Workflows 无法确保对来自 Cloud Tasks 的重复请求进行精确一次处理。

  • 您可以在 Workflows 中启用执行回推,从而消除执行延迟并最大限度地提高吞吐量。积压的执行作业 在执行并发配额可用时立即自动运行。对于 请参阅 管理执行积压工作

准备工作

  1. 如果您还没有要加入队列的工作流,请创建工作流
  2. Enable the Cloud Tasks API.

    Enable the API

将任务加入队列以执行工作流

  1. 创建一个服务账号,以便 Cloud Tasks 可以向 Workflows API 发出请求:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    SERVICE_ACCOUNT_NAME 替换为以下名称: 介于 6 到 30 个字符之间。可以包含小写字母数字字符 和短划线。在服务账号创建完毕后,无法再更改其名称。

  2. 如需允许将运行 Cloud Tasks 命令的主账号充当 Identity and Access Management (IAM) 服务账号,请授予一个角色以让主账号能够模拟服务账号

  3. 为您的新服务账号授予 workflows.invoker 角色,以便该账号有权触发您的工作流:

    gcloud projects add-iam-policy-binding PROJECT_NAME \
        --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
        --role roles/workflows.invoker

    替换以下内容:

    • PROJECT_NAME:您的 Google Cloud 项目的名称。
    • SERVICE_ACCOUNT_NAME:您之前创建的服务账号的名称。
  4. 如果您还没有 Cloud Tasks 队列,请创建一个

  5. 创建一个以工作流的 HTTP 端点为目标的任务,并使用之前创建的服务账号进行身份验证:

    gcloud tasks create-http-task \
        --queue="QUEUE_ID" \
        --url="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \
        --body-content="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \
        --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com"

    替换以下内容:

    • QUEUE_ID:您分配给 Cloud Tasks 队列的标识符;例如 my-queue
    • PROJECT_NAME:您的 Google Cloud 项目的名称。
    • REGION_NAME:您的工作流所在的区域,例如 us-central1
    • WORKFLOW_NAME:您要为其创建任务的工作流的名称。
    • DOUBLE_ESCAPED_JSON_STRING:您要传递的所有参数的 JSON 编码。带英文引号的字符串中的英文双引号使用反斜杠 (\) 进行转义。例如:--body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
    • SERVICE_ACCOUNT_NAME:您之前创建的服务账号的名称。

    您的任务已创建并添加到 Cloud Tasks 队列中。该任务保留在队列中,直到工作流执行开始并返回 HTTP 2xx 状态代码。此时,Cloud Tasks 会将任务视为完成。

后续步骤