建立 App Engine 佇列

本頁面說明如何使用 Google Cloud SDK 的 gcloud 指令來建立並設定 App Engine 佇列

事前準備

如要使用 Cloud Tasks API 存取 Cloud Tasks 服務,您的專案必須包含位於特定地區App Engine 應用程式,目前有:這個位置將做為您的 Cloud Tasks 要求的 LOCATION_ID 參數,因此請記下這個資訊。請注意,在 App Engine 指令中稱為 europe-westus-central 的兩個位置,在 Cloud Tasks 指令中則分別稱為 europe-west1us-central1。應用程式可做為開發人員建立的任何佇列的所在位置。基礎的 Cloud Tasks 服務本身也是在相同位置執行。

建立 App Engine 佇列

使用 Google Cloud SDK 建立佇列:

gcloud beta tasks queues create-app-engine-queue [QUEUE_ID]

其中:

  • QUEUE_ID 是您指派給佇列的 ID,例如 my-app-engine-queue

剛建立好的佇列可能需要幾分鐘的時間才能提供使用。接著,使用 describe 來驗證佇列已建立成功:

gcloud beta tasks queues describe [QUEUE_ID]

輸出應如下所示:

appEngineHttpQueue: {}
name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/[QUEUE_ID]
rateLimits:
  maxBurstSize: 100
  maxConcurrentDispatches: 1000
  maxDispatchesPerSecond: 500.0
retryConfig:
  maxAttempts: 100
  maxBackoff: 3600s
  maxDoublings: 16
  minBackoff: 0.100s
state: RUNNING

如果您沒有看到上述輸出內容,您可以嘗試下列方法:

  • 等待至少一分鐘的時間,讓佇列完成初始化。
  • 確認尚未存在相同 ID 的佇列。您可以呼叫下列指令來查看專案中的所有佇列:

    gcloud beta tasks queues list
    
  • 檢查您是否已達到佇列限制:

    前往 Cloud Tasks 配額頁面

    如要提高資源限制,請填妥配額申請表

  • 檢查指令的各個部分後重新執行指令。

設定 App Engine 佇列

您可以在建立 App Engine 佇列時進行佇列設定,也可以在之後隨時進行設定,設定將套用到該佇列中的所有工作。

設定佇列有三個基本層面:

設定轉送

佇列需要知道包含適當工作站的服務名稱與版本,也稱為「目標」。設定目標的方法有三種:

  • 切勿明確設定目標。在這個情況下,會使用預設服務
  • 在工作本身中明確宣告目標。如果您要使用預設以外的目標,這是建議使用的方法。
  • 將佇列中的「所有」工作明確轉送到非預設的目標。這個方法會覆寫工作本身可能設定的任何轉送作業。

如要設定將會覆寫任何工作層級轉送作業的非預設佇列層級轉送作業:

gcloud beta tasks queues update-app-engine-queue [QUEUE_ID] \
    --routing-override=service:[SERVICE],version:[VERSION]

其中:

  • SERVICE 是負責處理工作的 App Engine 工作站服務。
  • VERSION 是應用程式版本。

舉例來說,如果設定名為 worker 的工作站服務來處理名為 barbequeue 的佇列中的所有工作,您可以藉由呼叫下列指令來轉送到該服務及預設版本:

gcloud beta tasks queues update-app-engine-queue barbequeue \
    --routing-override=service:worker

gcloud beta tasks queues describe barbequeue

輸出應如下所示:

appEngineHttpQueue:
  appEngineRoutingOverride:
    host: worker.[PROJECT_ID].appspot.com
    service: worker
name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/barbequeue
rateLimits:
  maxBurstSize: 100
  maxConcurrentDispatches: 1000
  maxDispatchesPerSecond: 500.0
retryConfig:
  maxAttempts: 100
  maxBackoff: 3600s
  maxDoublings: 16
  minBackoff: 0.100s
state: RUNNING

建立頻率限制

您可以設定佇列可分派的頻率與並行工作數上限。

gcloud beta tasks queues update-app-engine-queue [QUEUE_ID] \
    --max-dispatches-per-second=[DISPATCH_RATE] \
    --max-concurrent-dispatches=[MAX_RUNNING]

其中:

  • DISPATCH_RATE 是佇列分派其工作的頻率上限。
  • MAX_RUNNING 是佇列中可同時執行的工作數上限。

舉例來說,如果您在建立名為 barbequeue 的佇列時沒有設定任何參數,您可以藉由呼叫下列指令來更新並行工作數上限:

gcloud beta tasks queues update-app-engine-queue barbequeue \
        --max-concurrent-dispatches=20

gcloud beta tasks queues describe barbequeue

輸出應如下所示:

appEngineHttpTarget: {}
name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/barbequeue
rateLimits:
  maxBurstSize: 100
  maxConcurrentDispatches: 20
  maxDispatchesPerSecond: 500.0
retryConfig:
  maxAttempts: 100
  maxBackoff: 3600s
  maxDoublings: 16
  minBackoff: 0.100s
state: RUNNING

設定重試參數

如果工作並未成功完成,Cloud Tasks 將根據您設定的參數,透過指數輪詢重試工作。您可以指定在佇列中重試失敗工作的次數上限、設定重試嘗試的時間限制,以及控制重試嘗試的時間間隔。

gcloud beta tasks queues update-app-engine-queue [QUEUE_ID] \
    --max-attempts=[MAX_ATTEMPTS] \
    --min-backoff=[MIN_INTERVAL] \
    --max-backoff=[MAX_INTERVAL] \
    --max-doublings=[MAX_DOUBLINGS] \
    --max-retry-duration=[MAX_RETRY_DURATION]

其中:

  • MAX_ATTEMPTS 是工作的嘗試次數上限,這也包含第一次嘗試。將這個標記設為 unlimited 即可允許無限制重試。
  • MIN_INTERVAL 是嘗試重試之前等待的時間長度下限。這個數值必須是結尾為「s」的字串,例如 5s
  • MAX_INTERVAL 是嘗試重試之前等待的時間長度上限。這個數值必須是結尾為「s」的字串,例如 5s
  • MAX_DOUBLINGS 是失敗工作重試間隔時間加倍遞增到常數之前,將間隔時間加倍的次數上限。
  • MAX_RETRY_DURATION 是重試失敗工作的時間上限。這個數值必須是結尾為「s」的字串,例如 5s

驗證佇列已設定成功:

gcloud beta tasks queues describe [QUEUE_ID]

相關資源

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Tasks 說明文件