3

これまで、RabbitMQ コンシューマー クライアントはプリフェッチ値 1 を使用していました。パフォーマンスを向上させるために値を増やしたいと考えています。値を 2 に設定すると、RabbitMQ サーバーは各コンシューマーに一度に 2 つのメッセージを送信するので、2 つのメッセージを解析し、最初のメッセージが処理されて確認されるまで 2 番目のメッセージをリストに保存する必要がありますか? それとも、API が舞台裏でこれを処理しますか?

Java AMQP クライアント ライブラリを使用しています。

ConnectionFactory factory = new ConnectionFactory();
...
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

channel.basicQos(2);

QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(CONSUME_QUEUE_NAME, false, consumer);

while (!Thread.currentThread().isInterrupted()) {
   try {
      QueueingConsumer.Delivery delivery = consumer.nextDelivery();
      String m = new String(delivery.getBody(), "UTF-8");

      // Will m contain two messages? Will I have to each message and keep track of them within a List?

      ...
}
4

2 に答える 2

6

API がこれをバックグラウンドで処理するので、心配する必要はありません。

どのメッセージがどこに到達するかに関して、RMQ はラウンド ロビンを使用して配信し1 2 3 4 5 6ます。consumer1consumer2

consumer1 will have 1 3 5
consumer2 will have 2 4 6

いずれかのコンシューマーへの接続が切断された場合、プリフェッチされたメッセージは、同じ配信方法を使用してアクティブなコンシューマーに再配信されます。

これは興味深い読み物であり、何が起こるかをより正確に理解するための良い出発点になるはずです:

于 2013-04-08T18:49:03.143 に答える