2012-11-19 99 views
4

我爲我的應用程序使用了Rabbit MQ。有時我需要停止我的消費者由於維護。所以,會有數千條消息在隊列中等待。重新啓動消費者後,消息傳遞率很高(每秒消息500-600條)。以這樣的速度,我的一個消費者無法處理這些消息並導致服務器崩潰。減慢兔子MQ送貨速度

我將在未來改變消費者代碼,但現在我需要一個快速解決方案。

那麼,有沒有辦法減慢交貨速度?我嘗試了basicQos方法,但它不起作用。

注:我爲消費者使用Java。

+1

你可以在消費者中調用'Thread.sleep()'。如果消費者數量有限,它會降低交付率。但這只是緩和的。 – user1516873

回答

4
channel.basicConsume(queueName, false, consumer); 
channel.basicQos(50); 

consumer.getChannel().basicAck(delivery.getEnvelope().getDeliveryTag(), false); 

前兩行使自動確認爲假,並設置傳遞限制。第三行在處理消息完成後確認消息。這解決了我的問題。當自動確認爲真時,即使處理先前的消息未完成,消費者也會從隊列中獲取消息。這會導致內存問題和服務器故障。