多くの通信サーバーがデータパケットを送信しています。これらのサーバープログラムからのこれらのデータパケットは、アップデーターが処理するまでMSMQに保存します。データの損失が懸念されており、これらのサーバープログラムからのデータパケットを失わないようにし、効率的でパフォーマンスの高いソリューションを求めています。
最良の設計アプローチは何でしょうか?
多くの通信サーバーがデータパケットを送信しています。これらのサーバープログラムからのこれらのデータパケットは、アップデーターが処理するまでMSMQに保存します。データの損失が懸念されており、これらのサーバープログラムからのデータパケットを失わないようにし、効率的でパフォーマンスの高いソリューションを求めています。
最良の設計アプローチは何でしょうか?
さて、始めるためにあなたがしなければならない2つの基本的なことがあります。まず、デフォルトのインストールを変更して、ミラーリングされているドライブや、オペレーティングシステムがそのサーバーで起動するドライブとは異なるドライブにストレージの場所を移動する必要があります。また、検討しているボリュームに応じて、メッセージがキューに入れられるときにメッセージを保持するのに十分なスペースがあることを確認する必要があります。この記事はそれをカバーしています。
次に、信頼性を確保するためにトランザクションとジャーナルを使用する必要があります。これはプログラミングとインフラストラクチャの両方の問題であるため、この記事を参照してから、MSMQに対して正しくプログラミングする方法に関する一般的なガイドをフォローアップすることができます。たとえば、これはかなり基本的なことですが、MSMQを使用したことがない場合の出発点として適しています。MSMQをWCFのバインディング/トランスポートとして使用する場合は、配管部分がほぼカバーされています。表示されると思われるボリュームとトラフィックを処理するようにサービスを構成するだけです。
多くの通信サーバーがデータパケットを送信しています。
「データパケット」を格納するときは[Serializable]
、主にWCFがMSMQに対して透過的に読み取り/書き込みできるため、.NETオブジェクトをWCFに書き込むことをお勧めします。これは操作が簡単ですが、データパケットがTCP / IPまたはバイナリパケットである場合は、「順序付け」をオンにして、配置されたとおりの順序でキューに入るようにする必要があります。
MSMQにもセッションがあるため、アイテムをグループ化する場合はこれが可能です。WCFはこの保証を行いません。このためのカスタムコードを作成する必要がありますが、これは特定のセッションの各メッセージに一意のIDを割り当てる場合のみです。
データの損失が懸念されており、これらのサーバープログラムからのデータパケットを失わないようにしたいと考えています。
MSMQはデータをディスクに永続化できるため、サーバーがダウンしても、そのキューは保持されます。MSMQはキューをメモリに保持できます。これはより効率的ですが、クラッシュ/再起動してもキュー情報は保持されません。
効率的(優れたパフォーマンス)が必要
MSMQはかなりパフォーマンスが高いです。ディスクへの永続性にはわずかなオーバーヘッドがありますが、これはディスクへの書き込みのみが原因です。パフォーマンスにマルチスレッドが含まれる場合、キューはシーケンシャルであるため、MSMQはこの機能を提供しません。したがって、順番に処理する必要があります。しかし、これは典型的なキューテクノロジーです。
MSMQの最大メッセージサイズも4MBであるため、ネットワークを介して送信する内容に注意してください。
他の唯一のことは、MSMQは大規模にスケーラブルではないということです。その主な目標は、配達の保証です。何百万ものパケットを投稿すると、それらは宛先に到達しますが、MSMQにはメッセージを他のマシンにプッシュする有限の機能があります。ThreadPoolのようなシステムを運用しているため、これも要件である場合はスケーリングされません。
また、データの書き込みの基本的な例を含む情報を#msmq-wcfwikiに追加しました。