TIBCO EMS を介して要求/応答サービスを提供するサーバー側プロジェクトに取り組んでおり、このサービスのスケーラビリティと低遅延をアーカイブするためのベスト プラクティスに関するアドバイスを探しています。私は .NET でこれを行っていますが、TIBCO EMS はおそらく JMS 仕様を実装しているため、他の JMS 実装やプラットフォーム (Java) に関するアドバイスが適切であると思います。
現在、1 つの Connection、1 つの Session、1 つの Consumer を使用し、その 1 つの Consumer でコールバックを使用してメッセージをリッスンしています。各要求はコールバック スレッドで処理され、異なるキュー (ただし同じセッション) で同期的に応答します。これは機能しますが、スケーリングしているようには見えません。高いトランザクション レートでも CPU 負荷は無視できますが、リクエストのレイテンシは増加し続けます。
EMSがコールバックに単一のスレッドを使用しているため、処理時間と応答の送信に必要な時間が発生しているため、他のリクエストの処理がブロックされていると思いますが、これをスケーリングする最良の方法は何ですか?
1 つの方法は、受信したスレッド プールで着信要求の実際の処理をすぐにスケジュールすることです。これは迅速な修正であり、スケーリングされますが、追加のレイテンシが発生し、セッションの使用に関するスレッドの問題が発生します。もう 1 つは、多数の Session オブジェクト、または Connection オブジェクトを使用することでしょうか? 誰でもこれを行うためのベストプラクティスについてアドバイスをいただけますか?私はそれがより一般的な使用パターンの1つであるに違いないと思います...