このドキュメントでは、トピックにパブリッシュされたメッセージで同時実行制御を使用する方法について説明します。
同時実行制御を使用すると、クライアント ライブラリのパブリッシュ メッセージで使用されるデフォルトのバックグラウンド(I/O)スレッド数をオーバーライドできます。これにより、パブリッシャー クライアントはメッセージを並行して送信できます。
同時実行制御は、Pub/Sub の高レベル クライアント ライブラリで使用できる機能です。低レベル ライブラリを使用している場合は、独自の同時実行制御を実装することもできます。
同時実行制御のサポートは、クライアント ライブラリのプログラミング言語によって異なります。C++、Go、Java などの並列スレッドをサポートする言語を実装する場合、クライアント ライブラリはデフォルトのスレッド数を選択します。
このページでは、同時実行制御のコンセプトと、パブリッシャー クライアント向けにこの機能を設定する方法について説明します。同時実行制御用にサブスクライバー クライアントを構成するには、同時実行制御でより多くのメッセージを処理するをご覧ください。
始める前に
パブリッシュ ワークフローを構成する前に、次のタスクを完了していることを確認してください。
- トピックとパブリッシュのワークフローについて学びます。
- トピックを作成します。
必要なロール
トピックにメッセージをパブリッシュするために必要な権限を取得するには、トピックに対する Pub/Sub パブリッシャー(roles/pubsub.publisher
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
トピックとサブスクリプションを作成または更新するには、追加の権限が必要です。
同時実行制御の構成
同時実行制御変数のデフォルト値と変数の名前は、クライアント ライブラリによって異なる場合があります。たとえば、Java クライアント ライブラリでは、同時実行制御を構成するメソッドは setExecutorProvider()
と setChannelProvider()
です。詳細については、API リファレンス ドキュメントをご覧ください。
setExecutorProvider() を使用すると、パブリッシュ レスポンスを処理するために使用されるエグゼキュータ プロバイダをカスタマイズできます。たとえば、エグゼキュータ プロバイダを、複数のパブリッシャー クライアントにわたってスレッド数が制限された単一の共有エグゼキュータを返すプロバイダに変更できます。この構成は、作成されるスレッドの数を制限することに役立ちます。
setChannelProvider() を使用すると、Pub/Sub への接続の開始に使用するチャネル プロバイダをカスタマイズできます。通常、複数のパブリッシャー クライアントで同じチャネルを使用する場合を除き、この値は構成しません。チャネルを多くのクライアントで再利用すると、
GOAWAY
エラーまたはENHANCE_YOUR_CALM
エラーが発生する可能性があります。アプリケーションのログまたは Cloud Logging にこれらのエラーが表示された場合は、チャンネルを追加します。
同時実行制御のコードサンプル
C++
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C++ の設定手順を実施してください。詳細については、Pub/Sub C++ API リファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API リファレンス ドキュメントをご覧ください。
次のステップ
Pub/Sub がメッセージ データを保存するロケーションを制限するには、Pub/Sub リソースのロケーションの制限をご覧ください。
メッセージの受信の詳細については、サブスクリプション タイプを選択するをご覧ください。