rabbitmq队列中消息过多,队列不会过期

问题描述 投票:0回答:1

我正在将

rabbitmq 3.7.0
nodejs
一起使用,并在 typescript 中使用
this
库。所有消费者都是
{noAck: false, exclusive: false}
,所有队列都是
{prefetch:1, expires: 14400000, durable:false}
(4小时)。

我有很多队列没有任何待处理的确认,但仍然保存着数百条消息。除此之外,队列不会在应该过期的时候过期,这会在几天后产生性能问题。我还没有找到任何理由说明为什么消息在 ack 过程后仍在队列中。

谢谢

编辑(1)-缺少我从答案中感知到的信息

据我评估,如此数量的队列没有活跃的消费者。可以在管理工具中确认这些信息吗?

使情况变得复杂的是,我不能简单地删除最后一个消费者之后的队列,因为我可以使用它来恢复损坏的会话,并且如果我不删除最后一个消费者之后的队列,队列将继续更新。但expires参数应该足够了。

管理工具的一些快照:

node.js rabbitmq
1个回答
2
投票

我建议您阅读

expires
如何工作的文档:https://www.rabbitmq.com/ttl.html#queue-ttl

如果您的队列没有过期,则意味着您很可能已经在其上注册了消费者。还有其他几种情况队列不会过期。

对于那些据称已确认但仍保留在队列中的消息,我唯一的解释是它们可能根本没有被传递。

最后,如果没有更多信息或可靠的复制者,则无法通过提供的有限信息提供更多进一步的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.