使用 Cloud Tasks 將工作流程執行作業加入佇列

您可以使用 Cloud Tasks 將工作流程加入佇列,並以非同步方式執行。

Cloud Tasks 提供下列控制項:

  • 排定特定傳送時間
  • 管理放送率
  • 設定重試行為
  • 存取及管理佇列中的個別工作
  • 啟用工作重複資料刪除功能

舉例來說,如果要求會觸發工作流程,且可能意外超出 Workflows 限制,這些控制項就非常實用。只要設定 Cloud Tasks 佇列的速率限制和重試次數,即可確保所有這類要求都會執行工作流程。

詳情請參閱「瞭解 Cloud Tasks」一文。

注意事項:

  • 您應根據 Execution API 寫入要求的 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 佇列的 ID,例如 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 會將工作視為完成。

後續步驟