本文說明如何對發布至主題的訊息使用流量控制。
關於流量控制
發布端用戶端嘗試發布訊息的速度,可能快於該用戶端將資料傳送至 Pub/Sub 服務的速度。用戶端會受到許多因素限制,包括:
- 機器 CPU、RAM 和網路容量
- 聯播網設定,例如未完成的要求數量和可用頻寬
- 每項發布要求的延遲時間,主要取決於 Pub/Sub 服務、用戶端和 Google Cloud之間的網路連線
如果發布要求比率超過這些限制,要求會在記憶體中累積,直到失敗並傳回 DEADLINE_EXCEEDED 錯誤。如果迴圈中發布了數萬則訊息,在幾毫秒內產生數千個要求,就特別容易發生這種情況。
您可以查看 Monitoring 中的伺服器端指標,診斷這個問題。您無法查看因 DEADLINE_EXCEEDED 而失敗的要求,只能查看成功的要求。成功要求的比率可反映用戶端機器的處理量,為設定流量控制提供基準。
如要緩解流量速率問題,請為發布者用戶端設定流量控制,限制發布要求的速率。您可以設定分配給未完成要求的位元組數上限,以及允許的未完成訊息數量上限。請根據用戶端機器的處理量,設定這些限制。
事前準備
設定發布工作流程前,請務必完成下列工作:
必要的角色
如要取得使用流量控制所需的權限,請要求管理員授予您主題的 Pub/Sub 發布者 (roles/pubsub.publisher) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
您需要額外權限,才能建立或更新主題和訂閱項目。
對訊息使用流量控制
發布者流量控管功能可透過 Pub/Sub 用戶端程式庫使用,支援下列語言:
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 v2 程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照「快速入門導覽課程:使用用戶端程式庫」中的 Ruby 設定操作說明進行操作。詳情請參閱 Pub/Sub Ruby API 參考文件。