RabbitMq用于我们的应用程序 有几百个时间累积的消息,处于几个队列的非堆叠状态,并且当侦听器不活动时,由于几个意外关闭,TTL无法正常工作。
现在出于商业原因我不能清空队列。 我想手动将未经处理的消息推送到就绪状态。
有没有??
谢谢!
答案 0 :(得分:2)
有两种方法可以将邮件从unack'd转移到就绪状态:
1)来自消费者的消息
2)关闭正在打开它们的消费者
最有可能的是,选项#1实际上不是一个选项。当消息卡在unack'd中时,通常是因为消费者丢失了对消息的跟踪而又不能再消息了。
这通常会留下#2:您需要关闭之前已连接到该队列的所有消费者。当消息被取消并且消费者丢失时,RMQ将把消息推回准备状态。
如果你关闭你的消费者并重新启动它们会将消息恢复到unack'd状态,那么你需要找出导致消费者错误的原因,修复代码并重新启动它。
答案 1 :(得分:1)
另一种方法是简单地重新启动Rabbitmq实例。
/etc/init.d/rabbitmq-server restart
答案 2 :(得分:0)
Args.nack = function(tag, allUpTo, requeue)
因此,执行nack时,键为true以便重新排队参数。