1

メッセージ トラフィックが多い場合に最適なパフォーマンスを得るために、C++ Apache QPID クライアントをスレッド化する最良の方法を探しています。

私たちのブローカーには 3 つの取引所があり、それぞれに 2 つの単方向キューがあります。C++ クライアントがプッシュする 3 つの「アップリンク」キューにかなりのトラフィックが発生します。

QPID ブローカーとのインターフェースに使用されるいくつかのまばらに文書化されたクラスがあります。接続、セッション、送信者、および受信者。接続はセッションを提供し、セッションは送信者または受信者を提供します。さまざまな QPID ドキュメントを読んだ後、これらのオブジェクトのどれがスレッド セーフ (またはスレッド セーフではない) であるか、またはクライアント ライブラリでスレッドが作成される結果になるかが不明です。QPID FAQ によると、ブローカーでのスレッド化はセッション レベルで発生します。クライアントのどこで発生するかについては言及されていません。

アップリンク キューの 1 つにデータをプッシュする必要があるクライアント アプリケーション内には、複数のスレッド コンテキストがあります。複数のコンテキストにサービスを提供するセッション、接続、または送信者のプールを持つのが最善ですか? それとも、QPID にはこのシナリオの内部で最適化が組み込まれているので、1 つの共有 Sender で十分である可能性がありますか?

目標は、シングル スレッドのボトルネックをどこかに置かないようにすることですが、存在するトラフィック負荷ごとに効率的に並行してスケーリングできるようにすることです。

4

1 に答える 1

1

ブローカーでのスレッド化は、接続レベルで発生します。つまり、特定の接続上のすべてのトラフィックはシリアル化され、スレッドのプールによって処理されます。クライアントには、必要な IO を実行するすべての接続で共有されるスレッドのプールがあります。アプリケーション自体がスレッドを作成して、送信側/受信側を駆動できます。言及されているすべてのオブジェクト (接続、セッション、送信者、および受信者) はスレッドセーフであることを意図していますが、一般的には、セッションごとにスレッドを、接続ごとに 1 つのセッションを最適としてお勧めします。

于 2012-04-04T18:21:50.410 に答える