資料管道有時會出現發布流量激增的情況。除非你做好準備,否則流量激增可能會讓訂閱者不堪負荷。避免流量尖峰的簡單解決方案,就是動態增加 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 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 Ruby API 參考說明文件。
後續步驟
瞭解可為訂閱項目設定的其他放送選項: