您可以使用 Cloud Tasks 將工作流程加入佇列,並以非同步方式執行。
Cloud Tasks 提供下列控制項:
- 排定特定傳送時間
- 管理放送率
- 設定重試行為
- 存取及管理佇列中的個別工作
- 啟用工作重複資料刪除功能
舉例來說,如果要求會觸發工作流程,且可能意外超出 Workflows 限制,這些控制項就非常實用。只要設定 Cloud Tasks 佇列的速率限制和重試次數,即可確保所有這類要求都會執行工作流程。
詳情請參閱「瞭解 Cloud Tasks」一文。
注意事項:
您應根據 Execution API 寫入要求的 Workflows 限制設定頻率限制。如有必要,您可以在 Google Cloud 控制台中要求調整大多數配額。進一步瞭解配額調整。
Cloud Tasks 的設計是提供「至少一次」的傳送;不過,Workflows 無法確保 Cloud Tasks 的重複要求只會處理一次。
在 Workflows 中啟用執行作業積壓,即可移除執行作業延遲,並盡量提高處理量。一旦執行並行配額可用,系統就會自動執行積壓的執行作業。詳情請參閱「管理執行作業積壓」。
事前準備
- 如果沒有要加入佇列的工作流程,請建立一個。
-
Enable the Cloud Tasks API.
將工作加入佇列,以執行工作流程
建立服務帳戶,讓 Cloud Tasks 可以對 Workflows API 發出要求:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將
SERVICE_ACCOUNT_NAME
替換為 6 到 30 個字元的名稱。可使用小寫英數字元和破折號,建立服務帳戶後,即無法變更名稱。如要允許執行 Cloud Tasks 指令的主體以 Identity and Access Management (IAM) 服務帳戶的身分運作,請授予主體可模擬服務帳戶的角色。
將 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
:先前建立的服務帳戶名稱。
如果沒有 Cloud Tasks 佇列,請建立一個。
使用先前建立的服務帳戶進行驗證,然後建立以工作流程 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 CloudREGION_NAME
:工作流程所在的區域,例如us-central1
。WORKFLOW_NAME
:要建立工作的工作流程名稱。DOUBLE_ESCAPED_JSON_STRING
:您傳遞的任何引數的 JSON 編碼。引號字串內的雙引號會使用反斜線 (\) 逸出。例如:--body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
SERVICE_ACCOUNT_NAME
:先前建立的服務帳戶名稱。
系統會建立工作並新增至 Cloud Tasks 佇列。 工作會保留在佇列中,直到工作流程開始執行並傳回 HTTP
。2xx
狀態碼為止,此時 Cloud Tasks 會將工作視為完成。