您可以使用 BufferTask
方法或 CreateTask
方法建立 HTTP 工作。本頁面提供指南,說明如何選擇建立 HTTP 工作的兩種方法。
您可以使用 BufferTask
方法,將 HTTP 要求傳送至佇列來建立工作。CreateTask
方法可讓您建構工作物件來建立工作。在大多數情況下,不需要明確建構工作物件。建立工作的最佳方法取決於佇列是否具有佇列層級的路由。
事前準備
請查看下列應用實例清單,確認是否有符合您情況的項目:
- 您想使用 RPC API 或用戶端程式庫 (而非 REST API) 建立工作
- 您要建立工作做為 App Engine 工作物件 (而不是一般 HTTP 目標的較常見工作物件,這些目標可能是 App Engine 目標,也可能不是)
如果符合上述任一情況,您就不需要選擇工作建立方法,因為系統只支援一種方法 (CreateTask
方法)。直接前往CreateTask
工作類型的說明文件:
檢查佇列是否已設定佇列層級的路由規則
在終端機中執行 gcloud tasks queues describe 指令:
gcloud tasks queues describe QUEUE_NAME \ --location=LOCATION
更改下列內容:
QUEUE_NAME
:佇列名稱。LOCATION
:佇列所在的區域。如果未指定,且有相關聯的應用程式,系統會使用專案的 App Engine 應用程式位置。
在輸出內容中,找出
httpTarget
欄位,並檢查是否已設定uriOverride
。如果輸出內容包含
uriOverride
的host
行,且指定了host
,表示佇列具有佇列層級的路由。如要選擇工作建立方法,請參閱「具有佇列層級路徑的佇列」一節。如果輸出內容未包含
uriOverride
的行,或uriOverride
說明未顯示host
,表示佇列沒有佇列層級的轉送功能。如要選擇工作建立方法,請參閱「沒有佇列層級轉送作業的佇列」一節 (或設定佇列層級轉送作業)。
使用佇列層級路徑的佇列
如果佇列採用佇列層級轉送,工作建立方法取決於工作的轉送需求:
- 工作與佇列層級指定的路徑需求相同:
使用
BufferTask
。瞭解如何使用BufferTask
方法建立工作。 - 工作有別於佇列層級指定的路由需求:
將佇列的
UriOverrideEnforceMode
設為
IF_NOT_EXISTS
,確保佇列層級的路由適用於沒有路由的工作 (例如BufferTask
工作),但會遵守攜帶自身路由規格的工作路由。然後使用CreateTask
。這個方法可讓您為工作指定個別轉送作業。瞭解如何使用CreateTask
方法建立工作。
沒有佇列層級轉送作業的佇列
如要為沒有佇列層級轉送作業的佇列建立工作,請使用 CreateTask
方法 (或設定佇列層級轉送作業)。CreateTask
方法包含指定工作路徑,如果佇列層級沒有路徑資訊,則必須指定路徑。瞭解如何使用
CreateTask
方法建立工作。
瞭解佇列層級的轉送
佇列層級轉送作業可讓您根據工作所在的佇列,指定工作的預設轉送資訊。您可以指定預設路徑僅適用於沒有專屬路徑資訊的工作,或是適用於所有工作。
如要執行下列操作,請選擇佇列層級的路由:
- 使用標準 HTTP 要求建立工作 (而非建構工作物件)
- 在目標服務前方使用佇列做為緩衝區
以目標為單位的做法
如果架構為每個目標服務使用一個佇列,最適合採用佇列層級的路由。這個模型可讓您:
- 根據目標管理工作 (例如,如果目標服務停止運作,則重新導向一組工作)
- 將佇列中的所有工作傳送至相同目標
- 使用
BufferTask
方法建立工作,不必明確建構工作物件
開啟及關閉佇列層級的覆寫行為
設定佇列層級的轉送後,您可以設定佇列的 UriOverrideEnforceMode,決定何時強制執行轉送。
IF_NOT_EXISTS
:只有在工作不含自己的路徑資訊時,才會套用佇列層級的路徑。如要讓佇列將工作分派至不同目標,請使用這項設定。ALWAYS
:即使工作包含自己的路徑資訊,系統一律會套用佇列層級的路徑。系統會以佇列層級轉送作業覆寫工作層級設定的任何轉送資訊。如要規定特定佇列中的工作必須使用相同的轉送資訊,請使用這項設定。