質問

永続的な‘プッシュ’の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に縛られていない場合は調べます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top