2013-04-24 123 views
1

我們有一個服務來偵聽Azure服務總線隊列。我們有另一個服務來監聽這個隊列的死信隊列。我們還有一系列測試,在部署完Azure應用程序後運行。測試Azure死信服務總線隊列

我們希望擴展我們的自動化測試,以便處理死信的部分也進行測試,但不確定我們如何編寫測試來確保消息進入死信隊列,正如在正常情況下情況消息不會死信。

目前我們正在測試這個手動,但我覺得這不是一個長期的選擇。

有什麼想法?

回答

5

根據服務總線docs,如果您將EnableDeadLetteringOnMessageExpiration設置爲true,如果消息過期,它將轉到死信隊列。所以,你可以這樣做:

var desc = new QueueDescription(QueueName); 
desc.EnableDeadLetteringOnMessageExpiration = true; 
desc.DefaultMessageTimeToLive = TimeSpan.FromSeconds(1); // one second is the min value 

你可以測試等待大於1秒,以確保消息進入死信隊列。

編輯:你也可以通過做receivedMessage.DeadLetter()死信收到的消息。這會自動將其放入死信隊列中。

+0

謝謝@TheDude,但隊列已經作爲系統部署的一部分而創建,並且其時序已設置爲我們所需要的。如果處理消息的服務在它過期之前(即1秒過期之前)處理它會怎樣?這種方法可能有一定的價值,但似乎充滿了時間問題的可能性。 – 2013-04-24 22:22:52

+1

@SamHolder我在我的答案中包含了另一種方法。 – TheDude 2013-04-25 01:08:47

5

在服務總線API中,Microsoft不提供將郵件直接發送到死信隊列而不將郵件發送到主隊列的功能。如果您嘗試使用路徑爲死信隊列創建MessageSender,則它將失敗並顯示異常。

你需要用假實現來模擬你的主隊列接收器,調用BrokeredMessage.DeadLetter()方法將消息轉移到死信隊列中。

相關問題