資料管道有時會出現發布流量遽增的情況。如果沒有做好準備,流量暴增可能會讓訂閱者不堪負荷。如要避免流量高峰,簡單的解決方法是動態增加 Pub/Sub 訂閱者資源,以便處理更多訊息。不過,這項解決方案可能會提高成本,或無法立即生效。舉例來說,您可能需要大量 VM。
訂閱者端的流量控制功能可讓訂閱者調整訊息的擷取速率。因此,流量控制機制可處理流量尖峰,不會增加費用,或直到訂閱者擴大為止。
流量控制是 Pub/Sub 高階用戶端程式庫提供的功能。使用低階用戶端程式庫時,您也可以自行實作流量控制程式設計。
需要流量控制就表示正在以比耗用訊息更高的速率發布訊息。如果這是持續狀態,而不是訊息量一時達到最高峰,請考慮增加訂閱者用戶端執行個體數量。
流量控制設定
流量控管可讓您設定待處理要求分配到的位元組數上限,以及允許的待處理訊息數上限。請根據用戶端機器的輸送量容量設定這些限制。
不同用戶端程式庫的流量控制變數預設值和變數名稱可能有所不同。舉例來說,在 Java 用戶端程式庫中,下列變數會設定流量控管:
setMaxOutstandingElementCount():定義 Pub/Sub 尚未收到確認或負面確認的訊息數量上限。
setMaxOutstandingRequestBytes():定義 Pub/Sub 尚未收到確認或負面確認的訊息大小上限。
如果超過 setMaxOutstandingElementCount()
或 setMaxOutstandingRequestBytes()
的限制,訂閱用戶端就不會再提取訊息。直到已提取的訊息獲得確認或負面確認為止。因此,我們可以根據執行更多訂閱者相關作業的成本,調整輸送量。
流程控制的程式碼範例
如要控制訂閱端接收訊息的速率,請使用訂閱端的流量控制功能。這些流量控制功能如以下範例所示:
C++
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 C++ 設定操作說明進行操作。詳情請參閱 Pub/Sub C++ API 參考說明文件。
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 參考說明文件。
Node.js
在嘗試這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 Pub/Sub Node.js API 參考說明文件。
Node.js
在嘗試這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 Pub/Sub Node.js API 參考說明文件。
Python
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Python 設定操作說明來進行。詳情請參閱 Pub/Sub Python API 參考說明文件。
Ruby
以下範例使用 Ruby Pub/Sub 用戶端程式庫 v3。如果您仍在使用第 2 版程式庫,請參閱 第 3 版遷移指南。如要查看 Ruby 第 2 版程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫的操作說明設定 Ruby 環境。詳情請參閱 Pub/Sub Ruby API 參考說明文件。
後續步驟
如要瞭解可為訂閱項目設定的其他傳送選項,請參閱下列文章: