このドキュメントでは、トピックにパブリッシュされたメッセージでフロー制御を使用する方法について説明します。
フロー制御について
パブリッシャー クライアントは、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 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 リファレンス ドキュメントをご覧ください。