我正在使用rabbitmq 3.7.0
中的this库中的nodejs
和typescript
。所有使用者均为{noAck: false, exclusive: false}
,所有队列均为{prefetch:1, expires: 14400000, durable:false}
(4小时)。
我有很多队列,没有任何待处理的ack,但仍然保存数百条消息。除此之外,队列不会在应有的时间到期,几天后会导致性能问题。对于为什么在ack过程之后,消息仍在队列中,我还没有任何理由。
谢谢
编辑(1)-缺少我从答案中发现的信息
据我估计,没有这么多队列的活跃用户。可以在管理工具中确认此信息吗?
使该方案复杂化的是,我不能简单地在最后一个使用者之后删除队列,因为我可以使用它来恢复中断的会话,如果我不删除最后一个使用者之后的de queue,则队列继续被更新。但是expires参数就足够了。
管理工具中的一些快照:
答案 0 :(得分:1)
我建议您阅读expires
的工作原理文档:https://www.rabbitmq.com/ttl.html#queue-ttl
如果您的队列没有过期,则意味着您很可能已在其上注册了使用者。还有其他几种情况,队列不会过期。
对于应该被确认但仍在队列中的消息,我唯一的解释是也许它们根本没有被传递。
最后,如果没有更多信息或没有可靠的复制者,那么在提供的信息量有限的情况下,就无法提供更多的帮助。
注意: RabbitMQ团队监视the rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。