当前位置: 首页 > 知识库问答 >
问题:

Azure Service Bus中死信队列中的邮件是否过期?

杜翰林
2023-03-14

Azure Service Bus中死信队列中的邮件是否过期?

我有这些队列设置:

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但是DeadletMessageCount奇怪地是0),我仍然可以从死信队列接收消息。(因此他们没有从队列中删除。)

共有2个答案

宗政元青
2023-03-14

在做了一些研究之后,我无意中发现了一个我完全忽略的事实:

即使禁用死信,邮件也可能过期。

当消息过期而禁用死字时(这是默认情况),它们将被删除。

因此,微软不自动从死信队列中删除邮件的理由可能是:

如果启用死字母,则明确希望过期消息不被丢弃,而是存储在其他位置(死字母队列),以便可以查看它们。

苍元章
2023-03-14

塞巴斯蒂安你的观察是正确的,因为一旦放置在死亡信子队列中的消息永远不会过期。它们将永远在那里可用,直到显式地从死亡信件子队列中删除。在上面关于工具/api的错误中,可能是刷新问题?对GetQueueAsync()的调用需要在消息被死字母后进行,这不是一个确定的时间,比如说,如果你有一个队列,其中有一千条消息已经过期,但是队列没有被使用(发送/接收操作),那么计数可能仍然以活动状态返回,直到执行某些操作。

 类似资料:
  • 问题内容: 我的ActiveMQ服务器中目前有一个名为的队列。每当消息处理失败时,ActiveMQ都会创建一个默认目录。是否可以将该名称更改为类似的名称?原因是将来我可能会有几个队列,而我希望它像 问题答案: 您要查找的东西称为,在此过程中,ActiveMQ为每个队列/主题创建特定的DLQ, 您可以按如下,通过调整你实现它有点 此配置将创建名称为的DLQ ,如果您不需要前缀,则可以删除属性。 希望

  • 我正在尝试实现一个策略,当activemq队列中的消息过期时,不会被移动到默认的死信队列ActiveMQ。DLQ,他们会去另一个死信队列。 我的应用程序使用camel-context进行路由和bean定义。我看了http://ActiveMQ . Apache . org/message-re delivery-and-dlq-handling . html,不确定如何实现individualDe

  • 我有一个lambda函数,我想为它创建一个SQS死信队列。我首先在Terraform中创建SQS: 这是来自Terraform的例子。但是,我被redrive_policy卡住了。 我是否正确理解,这为SQS队列设置了一个死信队列? 如果我设置了redrive_policy,这意味着我在一个DLQ上设置了一个DLQ。我觉得可以在DLQ上设置DLQ,在DLQ上设置DLQ,以此类推。 我找不到这方面的

  • 死信队列(Dead Letter Queue)本质上同普通的Queue没有区别,只是它的产生是为了隔离和分析其他Queue(源Queue)未成功处理的消息。 创建死信队列的方法参见createQueue() API,与创建普通队列无异, 死信队列不可调用deadMessage(), deadMessageBatch API,其他操作都与对普通Queue的操作无异。 为了将源Queue的未能成功处理

  • 对于异步的触发器,平台会对函数失败的任务进行最多3次重试。 在新建触发器的时候,为触发器配置一条死信队列,从用户的EMQ队列中选择一条,用于接收函数失败的任务。 在设置死信队列前,请对group: CIf76b0600-24e9-42c4-acf3-d491fbd9fd71​ 授予 FULL_CONTROL 权限,若不授予权限,平台将丢弃失败的任务信息。 消息的内容如下,以后可能增加字段,请用户在

  • 我正在使用死信频道EIP与骆驼文件中描述的死信频道完全相同。这是我的camel.xml(删除头) 我只有一条路由具有基于内容的路由器,其实质是,如果消息体具有getInfo,则从jms:foo路由到jms:getInfo,如果消息体具有performAction,则从jms.foo路由到jms:performAction 我预计,当jms:getInfo使用者没有运行时,交付将失败,重新交付尝试将