2014-09-24 37 views
2

我已經實現了寫入隊列的Web角色。這工作正常。然後我開發了一個Worker角色從隊列中讀取。當我從本地機器以調試模式運行它時,它會從隊列中讀取消息,但是當我部署Worker角色時,它似乎正在讀取隊列,因爲消息最終會在死信隊列中結束。任何人都知道可能會導致這種行爲?下面是一些可能是這件事的關鍵Azsure Worker角色從隊列中讀取

queueClient = QueueClient.Create(queueName, ReceiveMode.PeekLock); 
var queueDescription = new QueueDescription(QueueName) 
    { 
     RequiresSession = false, 
     DefaultMessageTimeToLive = TimeSpan.FromMinutes(2), 
     EnableDeadLetteringOnMessageExpiration = true, 
     MaxDeliveryCount = 20 
    }; 

回答

1

增加QueueDescription.DefaultmessageTimeToLive爲〜10分鐘。

此屬性決定了消息應該在隊列中生存多長時間 - 在處理之前(調用Message.Complete())。如果它仍然在隊列中超過2分鐘 - 它將自動移動到DeadLetterQueue(因爲您已將Set EnableDeetLetteringOnMsgExp設置爲true)。

TTL是在這些消息傳遞方案

  • 如果未在N分鐘處理的消息之後抵達 - 然後,如果消息嘗試它可能不是處理它任何更多
  • 有用有用(Reciever - msg.Complete()) - 這可能需要特殊處理

所以 - 爲了安全起見,DefaultMsgTTL的值要高一些。

希望它有助於! Sree