サーバーからクライアントへのMSMQ通信
-
08-07-2019 - |
質問
永続的な‘プッシュ’のMSMQを探していました。サーバーからクライアントへの通信。サーバーごとに最大1000クライアントが存在できます。
テストの1つでは、300のオフラインクライアントに小さなメッセージを送信してから、オンラインクライアントにメッセージを送信しました。最後のメッセージは、MSMQが配信不能メッセージ(MMCで確認)を処理したため、40分以上遅延しました。 また、戻りパスにMSMQを使用して、うまく機能するようにします。
MSMQがオフラインホストへの接続を試行する時間を短縮することで、この使用パターンに適合させる方法はありますか? そうでない場合、より適切な他のキューイング製品はありますか、それとも自分の時間をロールバックしますか?生のスループットは優先順位ではありませんが、送信キューの数と予測可能性/最大遅延は、クライアント(かなり古いマシンである可能性があります)のメモリフットプリントと同様です。
解決 2
私たちの解決策は、MSMQの管理COMインターフェイスの1つを介して、オフラインのマシン(クライアントが稼働しているかどうかを知らせるUDPメッセージを既に持っていました)のキューをプログラムで一時停止することでした。
既知の切断されたホストへのキューが一時停止されると、MSMQは配信不能メッセージを処理する時間を大幅に短縮しました。
また、テクノロジーを評価するためのテストを考える際に、ちょっとしたラテラル思考を適用するのもいい教訓でした!一般に、この問題のため、サーバーからクライアントへの通信にMSMQを使用することはお勧めしません。クライアントによるポーリングが望ましいと思います。
他のヒント
メッセージの紛失を気にしない場合は、ジャーナリングを無効にし、メッセージを回復不能にすることでパフォーマンスを向上させることができます。
オフラインシナリオの簡単な解決策は、発信キューごとにスレッドを使用するMSMQで利用可能なスレッドの数を増やすことです。各オフライン接続の試行には時間がかかり、スレッドがブロックされます。 http://technet.microsoft.com/en-us/library/cc957498.aspx できるだけ多くのスレッドを投げてみてください。
同業他社はActiveMQを使用しており、パフォーマンスを向上させながら柔軟性がはるかに高いと述べています。私は個人的にそれを扱ったことはありませんが、.Netに縛られていない場合は調べます。