並行控制是 Pub/Sub 高階用戶端程式庫的可用功能。使用低階程式庫時,您也可以實作自己的並行控制。
並行控制支援取決於用戶端程式庫的程式設計語言。對於支援平行執行緒的語言實作 (例如 C++、Go 和 Java),用戶端程式庫會預設選擇執行緒數量。
這個選項可能不適合您的應用程式。舉例來說,如果訂閱端應用程式無法處理大量收到的訊息,且並未受 CPU 限制,就必須增加執行緒數量。如果是 CPU 密集型訊息處理作業,減少執行緒數量可能較為合適。
本頁說明並行控制的概念,以及如何為訂閱端用戶端設定這項功能。如要設定發布商用戶端以進行並行控制,請參閱「並行控制」。
並行控制設定
並行控制變數的預設值和變數名稱可能因用戶端程式庫而異。詳情請參閱「API 參考文件」。舉例來說,在 Java 用戶端程式庫中,設定並行控制的方法為 setParallelPullCount()、setExecutorProvider()、setSystemExecutorProvider() 和 setChannelProvider()。
setParallelPullCount() 可讓您決定要開啟的串流數量。如果訂閱端用戶端可處理的資料量超過單一串流傳送的資料量 (10 MBps),您可以開啟更多串流。
setExecutorProvider() 可讓您自訂用於處理訊息的執行器供應商。舉例來說,您可以將執行器供應商變更為傳回單一共用執行器的供應商,並在多個訂閱端之間使用有限數量的執行緒。這項設定有助於限制建立的執行緒數量。用於並行控制的執行緒總數取決於用戶端程式庫中傳遞的執行器供應商,以及平行提取計數。
setSystemExecutorProvider() 可讓您自訂用於租約管理的執行工具供應器。通常您不會設定這個值,除非想在
setExecutorProvider和setSystemExecutorProvider中使用相同的執行器供應商。舉例來說,如果您有多個低輸送量的訂閱項目,可以使用同一個執行器提供者。使用相同值可限制用戶端中的執行緒數量。setChannelProvider() 可讓您自訂用於開啟 Pub/Sub 連線的管道供應商。通常您不會設定這個值,除非想在多個訂閱端之間使用相同管道。在過多用戶端重複使用管道,可能會導致
GOAWAY或ENHANCE_YOUR_CALM錯誤。如果在應用程式記錄或 Cloud Logs 中看到這些錯誤,請建立更多管道。
並行控制的程式碼範例
C++
在試用這個範例之前,請先按照「快速入門導覽課程:使用用戶端程式庫」中的 C++ 設定說明操作。詳情請參閱 Pub/Sub C++ API 參考文件。
Go
下列範例使用 Go Pub/Sub 用戶端程式庫的主要版本 (v2)。如果您仍在使用第 1 版程式庫,請參閱第 2 版遷移指南。如要查看第 1 版程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照「快速入門導覽課程:使用用戶端程式庫」中的 Go 設定說明操作。詳情請參閱 Pub/Sub Go API 參考文件。
Java
在試用這個範例之前,請先按照「快速入門導覽課程:使用用戶端程式庫」中的 Java 設定說明操作。詳情請參閱 Pub/Sub Java API 參考文件。
小茹
下列範例使用 Ruby Pub/Sub 用戶端程式庫第 3 版。如果您仍在使用第 2 版程式庫,請參閱 第 3 版遷移指南。如要查看 Ruby 第 2 版程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照「快速入門導覽課程:使用用戶端程式庫」中的 Ruby 設定操作說明操作。詳情請參閱 Pub/Sub Ruby API 參考文件。
Rust
在試用這個範例之前,請先按照「快速入門導覽課程:使用用戶端程式庫」中的 Rust 設定說明操作。詳情請參閱 Pub/Sub Rust API 參考文件。
後續步驟
如要瞭解可為訂閱項目設定的其他運送選項,請參閱下列文章: