Rabbitmq队列中的消息太多,队列没有过期

时间:2018-09-27 21:29:16

标签: node.js rabbitmq

我正在使用rabbitmq 3.7.0中的this库中的nodejstypescript。所有使用者均为{noAck: false, exclusive: false},所有队列均为{prefetch:1, expires: 14400000, durable:false}(4小时)。

我有很多队列,没有任何待处理的ack,但仍然保存数百条消息。除此之外,队列不会在应有的时间到期,几天后会导致性能问题。对于为什么在ack过程之后,消息仍在队列中,我还没有任何理由。

谢谢

编辑(1)-缺少我从答案中发现的信息

据我估计,没有这么多队列的活跃用户。可以在管理工具中确认此信息吗?

使该方案复杂化的是,我不能简单地在最后一个使用者之后删除队列,因为我可以使用它来恢复中断的会话,如果我不删除最后一个使用者之后的de queue,则队列继续被更新。但是expires参数就足够了。

管理工具中的一些快照:

enter image description here

1 个答案:

答案 0 :(得分:1)

我建议您阅读expires的工作原理文档:https://www.rabbitmq.com/ttl.html#queue-ttl

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

对于应该被确认但仍在队列中的消息,我唯一的解释是也许它们根本没有被传递。

最后,如果没有更多信息或没有可靠的复制者,那么在提供的信息量有限的情况下,就无法提供更多的帮助。


注意: RabbitMQ团队监视the rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。