我将Rabbit MQ用于我的应用程序。有时,由于维护,我需要停止我的消费者。因此,将有数千条消息在队列中等待。重启消费者后,消息投递率很高(每秒500-600条消息)。在这种情况下,我的一个消费者无法处理消息并使服务器崩溃。
我会在未来改变消费者代码,但现在我需要一个快速的解决方案。
那么,有没有办法降低交货率呢?我尝试了basicQos方法,但它不起作用。
注意:我正在使用面向消费者的Java。
发布于 2012-12-24 23:47:04
channel.basicConsume(queueName, false, consumer);
channel.basicQos(50);
consumer.getChannel().basicAck(delivery.getEnvelope().getDeliveryTag(), false);前两行使自动确认为假,并设置交付限制。第三行在消息处理完成后确认消息。这解决了我的问题。当auto acknowlegment为true时,即使之前的消息处理未完成,消费者也会从队列中获取消息。这会导致内存问题和服务器故障。
https://stackoverflow.com/questions/13449243
复制相似问题