2011-12-20 21 views
2

私のシナリオでは、メッセージはあらかじめ定義された順序で送信されます。システムに入ると、複数の受信者が着信キューからメッセージを取り出して処理します。処理が完了すると、処理されたメッセージは、到着したのと同じ順序で送信されます。スケールアップされたシステムでは、どうすればこのことが保証されますか?発信キュー内のメッセージの順序を維持する - .Net

このシステムは高い処理速度とスループットを必要とします。 .netの世界では、どのキューがこのシナリオにとって理想的でしょうか?

+1

明らかに、メッセージの応答を保存する必要があります。直ちにステータス "処理中"の発信キューにエントリを作成します。それを「完了」に更新し、ワーカーが完了したら応答を保存します。そして、まだ「処理中」のステータスのエントリをヒットするまで、キュー内のすべてを順番に送信します。 –

+1

このシナリオにはどのキューが最適でしょうか?私は質問を更新しました。 – Prathul

+0

System.Collections.Generic.Queue <>、メッセージキューではありません。 –

答えて

3

これは、システムのどこかで、すべてのものを1つのスレッドに絞り込む必要がある、秩序のある配信の根本的な問題です。これはやむを得ないことです。

これを実行することを選択すると、スループットに大きな違いが生じます。メッセージプロセッサ全体をシングルスレッドにすることもできます。これにより、注文は確実に維持されますが、スループットが低下します。

しかし、メッセージを同時に処理する方法はありますが、何らかの形で正しい順序で組み立てる必要があります。 Resequencer - http://eaipatterns.com/Resequencer.htmlという統合デザインパターンがあります。

しかし、再シーケンサーのパターンは、順序付けを示すためにメッセージに何もない場合は、システムにタイムスタンプまたはシーケンス番号を付けて各メッセージにスタンプすることができます。

さらに、全体のメッセージが、キューから入ってくるメッセージ全体にわたって配信されるように指示されていますか?たとえば、一部のメッセージのみが順番に配信される必要があるかもしれません。

または、メッセージを関連する識別子の下に「セット」にグループ化することができます。各セットオーダーを維持する必要がありますが、引き続き「セット単位」で同時に処理できます。

関連する問題