選擇工作建立方法

您可以使用 BufferTask 方法或 CreateTask 方法建立 HTTP 工作。本頁面提供指南,說明如何選擇建立 HTTP 工作的兩種方法。

您可以使用 BufferTask 方法,將 HTTP 要求傳送至佇列來建立工作。CreateTask 方法可讓您建構工作物件來建立工作。在大多數情況下,不需要明確建構工作物件。建立工作的最佳方法取決於佇列是否具有佇列層級的路由。

事前準備

請查看下列應用實例清單,確認是否有符合您情況的項目:

  • 您想使用 RPC API 或用戶端程式庫 (而非 REST API) 建立工作
  • 您要建立工作做為 App Engine 工作物件 (而不是一般 HTTP 目標的較常見工作物件,這些目標可能是 App Engine 目標,也可能不是)

如果符合上述任一情況,您就不需要選擇工作建立方法,因為系統只支援一種方法 (CreateTask 方法)。直接前往CreateTask工作類型的說明文件:

檢查佇列是否已設定佇列層級的路由規則

  1. 在終端機中執行 gcloud tasks queues describe 指令:

    gcloud tasks queues describe QUEUE_NAME \
        --location=LOCATION

    更改下列內容:

    • QUEUE_NAME:佇列名稱。
    • LOCATION:佇列所在的區域。如果未指定,且有相關聯的應用程式,系統會使用專案的 App Engine 應用程式位置。
  2. 在輸出內容中,找出 httpTarget 欄位,並檢查是否已設定 uriOverride

使用佇列層級路徑的佇列

如果佇列採用佇列層級轉送,工作建立方法取決於工作的轉送需求:

  • 工作與佇列層級指定的路徑需求相同: 使用 BufferTask。瞭解如何使用 BufferTask 方法建立工作。
  • 工作有別於佇列層級指定的路由需求: 將佇列的 UriOverrideEnforceMode 設為 IF_NOT_EXISTS,確保佇列層級的路由適用於沒有路由的工作 (例如 BufferTask 工作),但會遵守攜帶自身路由規格的工作路由。然後使用 CreateTask。這個方法可讓您為工作指定個別轉送作業。瞭解如何使用 CreateTask 方法建立工作。

沒有佇列層級轉送作業的佇列

如要為沒有佇列層級轉送作業的佇列建立工作,請使用 CreateTask 方法 (或設定佇列層級轉送作業)。CreateTask 方法包含指定工作路徑,如果佇列層級沒有路徑資訊,則必須指定路徑。瞭解如何使用 CreateTask 方法建立工作。

瞭解佇列層級的轉送

佇列層級轉送作業可讓您根據工作所在的佇列,指定工作的預設轉送資訊。您可以指定預設路徑僅適用於沒有專屬路徑資訊的工作,或是適用於所有工作。

如要執行下列操作,請選擇佇列層級的路由:

  • 使用標準 HTTP 要求建立工作 (而非建構工作物件)
  • 在目標服務前方使用佇列做為緩衝區

以目標為單位的做法

如果架構為每個目標服務使用一個佇列,最適合採用佇列層級的路由。這個模型可讓您:

  • 根據目標管理工作 (例如,如果目標服務停止運作,則重新導向一組工作)
  • 將佇列中的所有工作傳送至相同目標
  • 使用 BufferTask 方法建立工作,不必明確建構工作物件

開啟及關閉佇列層級的覆寫行為

設定佇列層級的轉送後,您可以設定佇列的 UriOverrideEnforceMode,決定何時強制執行轉送。

  • IF_NOT_EXISTS:只有在工作不含自己的路徑資訊時,才會套用佇列層級的路徑。如要讓佇列將工作分派至不同目標,請使用這項設定。
  • ALWAYS:即使工作包含自己的路徑資訊,系統一律會套用佇列層級的路徑。系統會以佇列層級轉送作業覆寫工作層級設定的任何轉送資訊。如要規定特定佇列中的工作必須使用相同的轉送資訊,請使用這項設定。