spring-amqp comsumer的性能非常慢

时间:2016-12-24 18:50:41

标签: spring-amqp

我一直遇到弹簧靴消费者的麻烦。我比较了两个消费者的工作。 第一个消费者:

import com.rabbitmq.client.*;
import java.io.IOException;

public class Recv {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                     AMQP.BasicProperties properties, byte[] body) throws IOException {
            }
        };

        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}

第二消费者:

@Controller
public class Consumer {

    @RabbitListener(queues = "hello")
    public void processMessage(Message message) {
    }
}

没有安装spring-boot使用者的配置文件,默认情况下一切都是。 在我的电脑上,第一个工作速度提高了10倍。可能是什么问题?

1 个答案:

答案 0 :(得分:0)

Spring AMQP消费者的默认预取(basicQos)为1,这意味着消费者在任何时候只有1条消息未完成;配置rabbitListenerContainerFactory @Bean以将prefetchCount设置为更大的值。

您必须覆盖默认启动配置的@Bean