2013-05-31 16 views
9

私は、空白のサービスバスキューを使用して一定期間にわたって動作する重複検出を設定できることを知っています。しかし、キュー内のオブジェクトに基づいて動作するかどうかは誰にも分かりますか?Windows Azure Service Busキューの重複検出はどのように機能しますか?

したがって、IDが "SO_1"のオブジェクトがキューに入れられ、その後消費される場合、重複検出は有効ですか?

私が尋ねるのは、タイムフレームとオブジェクトか、またはキューが重複しているものを決定するタイムフレームかどうかということです。

答えて

15

http://blog.iquestgroup.com/en/windows-azure-service-bus-duplicate-detection/#.UaiXrd7frIU

我々は重複を有効にすると、WindowsのAzureのサービスバスは、私たちのメッセージの履歴を保存するために開始します。この期間は数分から数日の範囲で設定できます。重複したメッセージがサービスバスに送信された場合、サービスは自動的にメッセージを無視します。

+1

最後の記事は役に立ちますが、アイテムをダンプするかどうかを決定する前に、重複検出によってアイテムが実際にキューに入っているかどうかを確認するかどうかはまだ分かりません。私は推測していません - それは単に重複のリストとそれらに対するチェックを保持し、キューの内容を無視します。私は決定的な答えが見つかるまで、この質問を開いたままにしておきます。 –

+0

「Windows Azure Service Busがメッセージの履歴を保存し始めるのは明らかです。この期間は数分から数日の範囲で設定することができます。 ' – astaykov

2

これは実際にちょうど私を噛んで、デフォルトは有効にしておき、デフォルトの時間は10分です。 「キー」はMessageIdです。私たちの場合、ほとんどのシナリオで重複検出は問題ありませんでしたが、一部では(特に10分の範囲で)悪いニュースでした。この問題を回避するために、我々は「ブレーカー」を導入しました:

// For this message, we need to prevent dups from being detected 
msg.MessageId = messageId + "_" + DateTime.Now.ToString("u"); 

あなただけの「スパム」を防ぎたい場合は、最小値(20秒)に重複検出ウィンドウを設定することを検討することがあります。 (個人的には、最低5秒のしきい値が大好きです)。

現在の許容範囲は20秒〜7日間です。

+2

FWIW - 高性能の状況では、「u」形式には秒が含まれます。私はちょうどこれが十分細かくなかったバグを修正しました。私の修正は、DateTime.Now.ToString( "yyyy-M-ddThh:mm:ss.ff")を使用することでした。これは "u"と同じですが、1/100秒にサブ秒を追加します。 – ProVega

関連する問題