从队列中读取Azure Worker角色

时间:2014-09-24 17:00:41

标签: azure-web-roles servicebus

我已经实现了写入队列的Web角色。这工作正常。然后我开发了一个Worker角色来从队列中读取。当我从本地机器以调试模式运行它时,它会从队列中读取消息,但是当我部署Worker角色时,它似乎正在读取队列,因为消息最终会在死信队列中结束。有谁知道这可能导致什么行为?下面是一些可能是解决这个问题的关键

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

1 个答案:

答案 0 :(得分:1)

将QueueDescription.DefaultmessageTimeToLive增加到约10分钟。

此属性指示消息在队列中应存在多长时间 - 在处理之前(调用Message.Complete())。如果它在队列中保留超过2分钟 - 它将自动移动到DeadLetterQueue(因为你将Set EnableDeadLetteringOnMsgExp设置为true)。

TTL在这些消息传递方案中很有用

  • 如果邮件在到达后N分钟后没有被处理 - 那么再处理它可能没什么用处
  • 如果尝试多次处理该消息并且从未完成(Reciever - msg.Complete()) - 这可能需要特殊处理

所以 - 为了安全起见,DefaultMsgTTL的值会高一些。

希望它有帮助! SREE