本頁說明如何將提取佇列程式碼從工作佇列遷移至 Pub/Sub。在 App Engine 中,建議使用 Pub/Sub 執行提取佇列工作。
如果應用程式同時使用提取佇列和發送佇列,請先按照本指南將提取佇列遷移至 Pub/Sub,再將發送佇列遷移至新的發送佇列服務 Cloud Tasks。將發送佇列遷移至 Cloud Tasks 後,不建議遷移提取佇列,因為必須使用 queue.yaml 檔案,可能會導致 Cloud Tasks 發生非預期行為。
Pub/Sub 目前未提供的功能
Pub/Sub 目前不支援下列工作佇列功能:
- 依標記批次處理
- 自動重複資料刪除
定價與配額
將提取佇列遷移至 Pub/Sub 可能會影響應用程式的價格和配額。
定價
Pub/Sub 有自己的定價。與工作佇列相同,使用 Pub/Sub 將要求傳送至 App Engine 應用程式可能會導致應用程式產生費用。
配額
Pub/Sub 配額與工作佇列配額不同。與工作佇列一樣,從 Pub/Sub 傳送要求至 App Engine 應用程式,可能會影響 App Engine 的要求配額。
遷移前
如果您尚未設定 Python 開發環境,請設定該環境以使用與 Google Cloud相容的 Python 版本,並安裝測試工具來建立隔離的 Python 環境。以下各節將說明將提取佇列遷移至 Pub/Sub 前的設定步驟。
啟用 Pub/Sub API
如要啟用 Pub/Sub API,請在 API 程式庫中,按一下「Pub/Sub API」的「啟用」。如果看到「管理」按鈕,而不是「啟用」按鈕,表示您先前已為專案啟用 Pub/Sub API,因此不需要再次啟用。
驗證應用程式的 Pub/Sub API
您必須向 Pub/Sub API 驗證應用程式。本節將討論兩種不同用途的驗證。
如要在本機開發或測試應用程式,建議使用服務帳戶。如需設定服務帳戶並將其連結至應用程式的操作說明,請參閱手動取得及提供服務帳戶憑證。
如要在 App Engine 上部署應用程式,您不需要提供任何新的驗證資訊。應用程式預設憑證 (ADC) 會推斷 App Engine 應用程式的驗證詳細資料。
下載 Google Cloud CLI
如要搭配使用 gcloud CLI 和 Pub/Sub API,請下載並安裝 Google Cloud CLI (如果先前未安裝)。如果已安裝 Google Cloud CLI,請從終端機執行下列指令。
gcloud components update
匯入 Cloud 用戶端程式庫
請按照下列步驟,在現有的 App Engine 應用程式中使用 Pub/Sub Python 用戶端程式庫:
更新
app.yaml檔案。請按照適用於您 Python 版本的操作說明操作:Python 2
如果是 Python 2 應用程式,請新增最新版本的
grpcio程式庫。以下是
app.yaml檔案範例:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latestPython 3
如果是 Python 3 應用程式,請在
app.yaml檔案中指定runtime元素,並使用支援的 Python 3 版本。例如:runtime: python310 # or another support versionPython 3 執行階段會自動安裝程式庫,因此您不需要指定先前 Python 2 執行階段的內建程式庫。如果 Python 3 應用程式在遷移時使用其他舊版隨附服務,您可以繼續指定必要的內建程式庫。否則,您可以刪除
app.yaml檔案中不必要的行。更新
requirements.txt檔案。請按照您使用的 Python 版本,依下列指示操作:Python 2
將 Pub/Sub 適用的 Cloud 用戶端程式庫新增至
requirements.txt檔案的依附元件清單。google-cloud-pubsub然後執行
pip install -t lib -r requirements.txt,更新應用程式可用的程式庫清單。Python 3
將 Pub/Sub 適用的 Cloud 用戶端程式庫新增至
requirements.txt檔案的依附元件清單。google-cloud-pubsub在 Python 3 執行階段中部署應用程式時,App Engine 會自動安裝這些依附元件,因此請刪除
lib資料夾 (如有)。如果是 Python 2 應用程式,且應用程式使用內建或複製的程式庫,您必須在
appengine_config.py檔案中指定這些路徑,該檔案與app.yaml檔案位於相同資料夾:import pkg_resources from google.appengine.ext import vendor # Set PATH to your libraries folder. PATH = 'lib' # Add libraries installed in the PATH folder. vendor.add(PATH) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(PATH)上方的
appengine_config.py檔案假設目前使用中的目錄是lib資料夾的所在位置。在某些情況下 (例如單元測試),目前的使用中目錄可能會有所不同。為避免發生錯誤,您可以使用下列指令,明確傳遞lib資料夾的完整路徑:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
在任何使用 Task Queues API 中提取佇列的檔案中,匯入 Pub/Sub Python 用戶端程式庫 :
from google.cloud import pubsub
Pub/Sub 和提取佇列
功能比較
Pub/Sub 會透過發布者/訂閱者關係將工作傳送給工作站。Pub/Sub 中的提取訂閱項目類似於工作佇列中的提取佇列,因為訂閱者會從主題提取訊息。下表列出工作佇列中提取佇列的核心功能,以及 Pub/Sub 中提取訂閱項目的相關功能。
| 工作佇列功能 | Pub/Sub 功能 |
|---|---|
| 佇列 | 主題 |
| 工作 | 訊息 |
| 工作站 | 訂閱端 |
如要進一步瞭解 Pub/Sub 架構,請參閱「Cloud Pub/Sub:Google 規模的訊息傳遞服務」。
工作流程比較
下表比較工作佇列中的提取佇列和 Pub/Sub 中的提取訂閱項目,兩者的一般工作流程。
| 工作佇列工作流程 | Pub/Sub 工作流程 |
|---|---|
| 建立提取佇列 | 您建立主題,並讓訂閱者 (即工作人員) 訂閱該主題 |
| 建立工作並將工作加入佇列 | 建立訊息並發布至主題 |
| 工作站會租用工作 | 訂閱者從主題提取訊息 |
| 工作站處理工作 | 訂閱者會處理訊息 |
| 工作站從佇列中刪除工作 | 訂閱者確認訊息 |
| 租約到期 | 當主題的所有訂閱者都已確認訊息,主題就會刪除該訊息 |
在 Pub/Sub 中建立提取訂閱項目
您可以將 Pub/Sub 提取訂閱項目當做 Task Queues 提取佇列使用。主題訂閱不會過期,且可同時存在於多個工作站。也就是說,一則訊息可由多個工作站處理,這是 Pub/Sub 的主要用途之一。如要重新建立 Task Queues 提取佇列,請將提取佇列設為 Pub/Sub 提取訂閱項目,為每個工作站建立主題,並只讓相關工作站訂閱該主題。這可確保每個訊息都只會由一個工作站處理,如同工作佇列一樣。如要瞭解如何建立及管理提取訂閱項目,請參閱管理主題與訂閱一文。
刪除提取佇列
將 Task Queues 提取佇列遷移至 Pub/Sub 提取訂閱項目後,請使用 queue.yaml 檔案從 Task Queues 刪除這些佇列。建議您先刪除每個提取佇列,再遷移下一個佇列。這樣一來,在您遷移其他提取佇列時,應用程式就不會重複處理從新 Pub/Sub 提取訂閱項目收到的工作。請注意,如果逐一刪除工作佇列提取佇列,而非在單一部署作業中刪除,可能會對 App Engine 部署配額造成較大的影響。
從工作佇列刪除所有提取佇列後,您可以在日後部署應用程式時省略 queue.yaml 檔案。
如果應用程式只使用提取佇列,請移除程式碼中對 Task Queues API 的所有參照。如果應用程式同時使用提取佇列和推送佇列,您可以移除僅使用提取佇列的檔案中出現的 Task Queues API 參照,也可以等到推送佇列也完成遷移後,再從所有檔案中移除 Task Queues API 參照。
後續步驟
- Pub/Sub 說明文件
- 遷移發送佇列
- 如需實作教學課程,請參閱從 App Engine 工作佇列提取佇列遷移至 Pub/Sub 程式碼研究室。