C# Azure Service Bus中死信队列中的邮件是否过期?
Azure Service Bus中死信队列中的邮件是否过期 一些解释 我有以下队列设置:C# Azure Service Bus中死信队列中的邮件是否过期?,c#,azure,message-queue,azureservicebus,C#,Azure,Message Queue,Azureservicebus,Azure Service Bus中死信队列中的邮件是否过期 一些解释 我有以下队列设置: var queueDescription = new QueueDescription("MyTestQueue") { RequiresSession = false, DefaultMessageTimeToLive = TimeSpan.FromMinutes(1), EnableDeadLetteringOnMessageExpiration = true, Max
var queueDescription = new QueueDescription("MyTestQueue")
{
RequiresSession = false,
DefaultMessageTimeToLive = TimeSpan.FromMinutes(1),
EnableDeadLetteringOnMessageExpiration = true,
MaxDeliveryCount = 10
};
namespaceManager.CreateQueue(queueDescription);
当我将一些消息放入Azure Service Bus消息队列(而不是来自Azure存储的队列)并且不使用它们时(永远),它们将自动移动到死信队列
然而,如果我也没有死信队列的消费者,这些消息会从死信队列中删除还是永远留在那里?(是否有一些官方文件说明这是如何工作的?)
我的审判
在我的试验中,我在队列中放置了3条消息。大约两分钟后,他们就死了。他们在死信队列中至少呆了一天,没有被移除
尽管调用给了我上面的值(注意
MessageCount
仍然是3
,但是deadletmessagecount
奇怪地是0
),我仍然可以从死信队列接收消息。(因此它们没有从队列中删除。)Sebastian您的观察是正确的,因为消息一旦放入死信子队列,就永远不会过期。在从死信子队列中明确删除之前,它们将永远在那里可用。在上述关于工具/api的错误中,是否可能是刷新问题?对GetQueueAsync()的调用需要在消息被死信(这不是一个确定的时间)后进行,例如,如果您有一个队列,其中有1000条消息已过期,但该队列未被使用(发送/接收操作),则在执行某些操作之前,计数可能仍会返回活动状态 在做了一些研究之后,我无意中发现了一个我完全忽略的事实:
即使禁用死信,邮件也可能过期。
当邮件过期而死信被禁用(这是默认设置)时,它们将被删除
因此,微软不自动从死信队列中删除邮件的理由可能是:
如果您正在启用死信,则明确地希望过期邮件不要被丢弃,而是存储在其他地方(死信队列),以便您可以查看它们。基本上:确保定期删除队列,可能以合理的方式删除(即以某种方式处理、抛出错误等).你能提供这个信息的来源吗?“即使禁用死信,邮件也可能过期”我试图查找,但无论如何都找不到该声明,因为我喜欢该评论。我相信也可能有这样一种情况,我们希望发送死信消息,这样我们就不会丢失数据,但仍然会有某种类型的消息过期,这些消息驻留在死信队列中。只是一个想法。