2013-05-31 64 views
9

我知道您可以設置重複檢測以在一段時間內使用天藍色的服務總線隊列工作。然而,有沒有人知道這是否基於隊列中的對象工作?Windows Azure服務總線如何排隊重複檢測工作?

因此,如果我有一個ID爲「SO_1」的對象被放入隊列並隨後被消耗,重複檢測仍然有效嗎?

我想我問的是 - 是時間框架和對象,還是隻是讓隊列決定什麼是重複的時間框架?

回答

15

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

當我們啓動複製,在Windows Azure服務總線將開始保存我們的信息的歷史記錄。這段時間可以配置爲從幾分鐘到幾天不等。如果重複的消息發送到服務總線,服務將自動忽略該消息。

+1

好東西感謝 - 上一篇文章是有用的,但它仍然沒有說重複檢測是否在確定是否轉儲項目之前檢查項目是否實際上在隊列中。我猜測不是 - 它只是保留重複列表並對它們進行檢查,並忽略隊列的內容。我會繼續討論這個問題,直到找到明確的答案。 –

+0

從「Windows Azure服務總線」開始存儲我們的消息歷史記錄就很清楚了。這段時間可以配置爲從幾分鐘到幾天。' – 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

相關問題