Azure 服务总线中的死信队列中的消息是否会过期?
一些解释
我有这些队列设置:
var queueDescription = new QueueDescription("MyTestQueue")
{
RequiresSession = false,
DefaultMessageTimeToLive = TimeSpan.FromMinutes(1),
EnableDeadLetteringOnMessageExpiration = true,
MaxDeliveryCount = 10
};
namespaceManager.CreateQueue(queueDescription);
当我将一些消息放入 Azure 服务总线消息队列(不是来自 Azure 存储的队列)并且不使用它们(永远)时,它们将自动移至死信队列。
但是,如果我也没有死信队列的使用者,消息是否会从死信队列中删除,还是会永远留在那里? (是否有一些官方文档说明这应该如何工作?)
我的试验
在我的试验中,我在队列中放置了 3 条消息。大约两分钟后,他们就变成了死信。它们在死信队列中保留了至少一天并且没有被删除。
虽然打电话NamespaceManager.GetQueueAsync()给了我上面的值(注意 MessageCount
仍然是 3
但 DeadLetterMessageCount
奇怪的是 0
),我仍然可以从死信队列接收消息。 (所以它们没有从队列中删除。)
最佳答案
塞巴斯蒂安(Sebastian)您的观察是正确的,消息一旦放入死信子队列就永远不会过期。它们将永远可用,直到从死信子队列中明确删除。在上述关于工具/api 的错误中,可能是刷新问题?需要在消息成为死信之后调用 GetQueueAsync(),这不是确定性时间,假设您有一个队列,其中包含一千条已过期的消息,但该队列未被使用(发送/接收操作) ) 那么计数可能仍会返回为“事件”状态,直到执行某些操作为止。
关于c# - Azure 服务总线中的死信队列中的消息是否会过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23626995/