2014-01-10 17 views
5

定義済みの有効期限切れタイムアウトを指定してメッセージをmsmqに入力する方法がある場合は、有効期限の下 私は次のシナリオ意味:msmqにメッセージの有効期限切れ時間を入力します。

  • メッセージの送信者が
message 1 published at 1:00 
message 2 published at 1:02 
message 3 published at 1:04 
  • メッセージのレシーバがキューからメッセージを受け取り、かなり頻繁にキューにメッセージを送信すると、時間の経過手順を実行する

メッセージ1は、1:00で受け取っそれは

特定の時間枠古いないメッセージを処理するローミングサービスを行うアプリケーションロジックによって1:05

  • で処理

    私たちは1分以上経過していないメッセージを処理していますので、これは です。メッセージ2がキューから消えてしまいます。

質問:私は、ボックス機能のうちによるということ

  • をアーカイブすることができますか?
  • もしそうでない場合は?これを行うベストプラクティスは何でしょうか?
  • は、このユースケースの原則として正しい技術ですか?どれがより良い要求に合っていますか?
+0

いくつかの特定の理由/制限のためにキューを使用していますか?データを共有する他の手段はありますか? –

+0

キューを使用するという考えは、複数の送信者が並行してメッセージを送信するという点から来ていますが、メッセージ処理はむしろ順次です。 –

答えて

5

Messageクラス(MSDN参照)TimeToBeReceived性質を有しています。私はそれがあなたの要求を満たすべきだと思います。

また、あなたのシステムは、メッセージを生成するのと同じペースでメッセージを消費することができないようです。 システムに関する詳細を知らなくてもわかりにくいですが、メッセージを並行して消費する可能性を検討する価値があります(まだ実行していない場合)。

+0

msdn states:宛先キューからメッセージを受信する最大時間を取得または設定します。 。メッセージが待ち行列にとどまる時間は面白いです –

+1

実際には、それはあなたが望むように動作すると思います。メッセージが指定された時間だけ待ち行列にとどまり、誰もそれを受け取っていなければ、基本的に捨てられる –

+0

ああ...はい!あなたが正しいです! –

0

あなたはプロデューサー/消費者の両方のソースコードへのアクセス権を持っている場合は、キューを共有することができますが、メモリ内と予想される時間枠内にあるメッセージをフィルタリングし、それらに

0

を処理するためにLINQを使用System.Messaging.Messageクラスましたタイムアウトするとメッセージが無視される(または不正な文字キューに投稿される)原因となるTimeToBeReceivedのプロパティ。

唯一の問題は、クライアント側の時刻がサーバー側の時刻と同期していることを確認する必要があることです。

+0

ちょうどMauroによってポストにピック! –

関連する問題