我正在将
rabbitmq 3.7.0
与 nodejs
一起使用,并在 typescript
中使用 this库。所有消费者都是
{noAck: false, exclusive: false}
,所有队列都是{prefetch:1, expires: 14400000, durable:false}
(4小时)。
我有很多队列没有任何待处理的确认,但仍然保存着数百条消息。除此之外,队列不会在应该过期的时候过期,这会在几天后产生性能问题。我还没有找到任何理由说明为什么消息在 ack 过程后仍在队列中。
谢谢
编辑(1)-缺少我从答案中感知到的信息
据我评估,如此数量的队列没有活跃的消费者。可以在管理工具中确认这些信息吗?
使情况变得复杂的是,我不能简单地删除最后一个消费者之后的队列,因为我可以使用它来恢复损坏的会话,并且如果我不删除最后一个消费者之后的队列,队列将继续更新。但expires参数应该足够了。
管理工具的一些快照:
我建议您阅读
expires
如何工作的文档:https://www.rabbitmq.com/ttl.html#queue-ttl
如果您的队列没有过期,则意味着您很可能已经在其上注册了消费者。还有其他几种情况队列不会过期。
对于那些据称已确认但仍保留在队列中的消息,我唯一的解释是它们可能根本没有被传递。
最后,如果没有更多信息或可靠的复制者,则无法通过提供的有限信息提供更多进一步的帮助。