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