我們有一個服務來偵聽Azure服務總線隊列。我們有另一個服務來監聽這個隊列的死信隊列。我們還有一系列測試,在部署完Azure應用程序後運行。測試Azure死信服務總線隊列
我們希望擴展我們的自動化測試,以便處理死信的部分也進行測試,但不確定我們如何編寫測試來確保消息進入死信隊列,正如在正常情況下情況消息不會死信。
目前我們正在測試這個手動,但我覺得這不是一個長期的選擇。
有什麼想法?
我們有一個服務來偵聽Azure服務總線隊列。我們有另一個服務來監聽這個隊列的死信隊列。我們還有一系列測試,在部署完Azure應用程序後運行。測試Azure死信服務總線隊列
我們希望擴展我們的自動化測試,以便處理死信的部分也進行測試,但不確定我們如何編寫測試來確保消息進入死信隊列,正如在正常情況下情況消息不會死信。
目前我們正在測試這個手動,但我覺得這不是一個長期的選擇。
有什麼想法?
根據服務總線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()
死信收到的消息。這會自動將其放入死信隊列中。
在服務總線API中,Microsoft不提供將郵件直接發送到死信隊列而不將郵件發送到主隊列的功能。如果您嘗試使用路徑爲死信隊列創建MessageSender,則它將失敗並顯示異常。
你需要用假實現來模擬你的主隊列接收器,調用BrokeredMessage.DeadLetter()方法將消息轉移到死信隊列中。
謝謝@TheDude,但隊列已經作爲系統部署的一部分而創建,並且其時序已設置爲我們所需要的。如果處理消息的服務在它過期之前(即1秒過期之前)處理它會怎樣?這種方法可能有一定的價值,但似乎充滿了時間問題的可能性。 – 2013-04-24 22:22:52
@SamHolder我在我的答案中包含了另一種方法。 – TheDude 2013-04-25 01:08:47