メッセージ トラフィックが多い場合に最適なパフォーマンスを得るために、C++ Apache QPID クライアントをスレッド化する最良の方法を探しています。
私たちのブローカーには 3 つの取引所があり、それぞれに 2 つの単方向キューがあります。C++ クライアントがプッシュする 3 つの「アップリンク」キューにかなりのトラフィックが発生します。
QPID ブローカーとのインターフェースに使用されるいくつかのまばらに文書化されたクラスがあります。接続、セッション、送信者、および受信者。接続はセッションを提供し、セッションは送信者または受信者を提供します。さまざまな QPID ドキュメントを読んだ後、これらのオブジェクトのどれがスレッド セーフ (またはスレッド セーフではない) であるか、またはクライアント ライブラリでスレッドが作成される結果になるかが不明です。QPID FAQ によると、ブローカーでのスレッド化はセッション レベルで発生します。クライアントのどこで発生するかについては言及されていません。
アップリンク キューの 1 つにデータをプッシュする必要があるクライアント アプリケーション内には、複数のスレッド コンテキストがあります。複数のコンテキストにサービスを提供するセッション、接続、または送信者のプールを持つのが最善ですか? それとも、QPID にはこのシナリオの内部で最適化が組み込まれているので、1 つの共有 Sender で十分である可能性がありますか?
目標は、シングル スレッドのボトルネックをどこかに置かないようにすることですが、存在するトラフィック負荷ごとに効率的に並行してスケーリングできるようにすることです。