2013-07-16 98 views
0

我正在與天青服務總線隊列工作在使用兩個隊列的請求/響應模式和一般它運作良好後。我使用了我找到的一些很好的例子中非常簡單的代碼。我的隊列在網絡和工作者角色之間,使用MVC4,Visual Studio 2012和.NET 4.5。消息在天青服務總線隊列保留在隊列到期時間

在一些壓力測試,我結束了我的過載系統和客戶端放棄之前的一些響應不交付(我會解決,這個問題不是重點)。

發生這種情況時,我最終留在我的響應隊列許多消息,都遠遠超過其ExpiresAtUtc時間。我的消息TimeToLive已設置5分鐘。

當我在隊列看看屬性的消息是,它明確規定在過去的到期,用5分鐘的傳輸TimeToLive。

創建隊列,如果不與下面的代碼存在的話:

namespaceManager.CreateQueue(
        new QueueDescription(RequestQueueName) 
        { 
         RequiresSession = true, 
         DefaultMessageTimeToLive = TimeSpan.FromMinutes(5) // messages expire if not handled within 5 minutes 
        }); 

什麼會導致郵件留在不久後它被設置爲過期隊列?

回答

1

據我所知,沒有後臺進程清理這些,只有通過調用Receive來移動隊列遊標纔會導致服務器跳過並處理過期的消息,並實際返回第一條未過期的消息或者全部過期的消息。

+0

那麼這很有趣,而不是我所期望的。雖然我不斷地在隊列中收到新的回覆,但如果它按照您的建議工作,應該清除已過期的郵件。我使用「AcceptMessageSessionAsync」接收會話消息。這可以忽略/跳過過期的消息嗎?此外,我現在用的是服務總線資源管理器應用程序[鏈接](http://code.msdn.microsoft.com/windowsazure/Service-Bus-Explorer-f2abca5a)監視的隊列,並選擇接收所有郵件菜單項只拉來自隊列的一條消息。 –

+0

偉大的問題,我不能肯定地說。據我所知,這種行爲是無證的。不難想象,會話確實影響接收處理哪些消息。但最終,如果你實際上沒有收到信息,你真的關心他們是否在那裏?另一個建議可能是設置EnableDeadLetteringOnMessageExpiration = true,看看是否改變了行爲,但是你有一個你需要傾向於自己的死信隊列。 –

+0

感謝您的補充評論。在我的情況下,我確實在乎有消息堵塞隊列,因爲其中有許多有負載。最終我的隊列將填滿。我會試驗死去的字母,看看會發生什麼。 –

相關問題