資料管道有時會出現發布流量飆升的情況。如果沒有做好準備,流量暴增可能會讓訂閱者不堪負荷。避免流量高峰的簡單解決方案是動態增加 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 Pub/Sub 用戶端程式庫第 3 版。如果您仍在使用第 2 版程式庫,請參閱 第 3 版遷移指南。如要查看 Ruby 第 2 版程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照「快速入門導覽課程:使用用戶端程式庫」中的 Ruby 設定操作說明操作。詳情請參閱 Pub/Sub Ruby API 參考文件。
Rust
在試用這個範例之前,請先按照「快速入門導覽課程:使用用戶端程式庫」中的 Rust 設定說明操作。詳情請參閱 Pub/Sub Rust API 參考文件。
後續步驟
如要瞭解可為訂閱項目設定的其他運送選項,請參閱下列文章: