4

アプリケーションにRabbitMQを使用しています。メンテナンスのために消費者を止める必要がある場合があります。したがって、キューで待機しているメッセージは数千になります。コンシューマーを再起動した後、メッセージ配信率が高くなっています(1秒あたり500〜600メッセージ)。そのレートでは、私の消費者の1人がメッセージを処理してサーバーを故障させることができません。

将来的にコンシューマーコードを変更しますが、今は簡単な解決策が必要です。

では、配信速度を遅くする方法はありますか?basicQosメソッドを試しましたが、うまくいきませんでした。

注:私はコンシューマーにJavaを使用しています。

4

1 に答える 1

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

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

最初の2行は、自動確認をfalseにし、配信制限を設定します。3行目は、メッセージの処理が完了した後、メッセージを確認します。これで私の問題は解決します。自動確認応答がtrueの場合、前のメッセージの処理が完了していなくても、コンシューマーはキューからメッセージを取得します。これにより、メモリの問題とサーバーの障害が発生します。

于 2012-12-24T15:47:03.767 に答える