Java RabbitMQ接收速度慢

Java RabbitMQ接收速度慢,java,rabbitmq,message-queue,spring-amqp,messagebroker,Java,Rabbitmq,Message Queue,Spring Amqp,Messagebroker,我需要创建一个应用程序,它应该从数据生产者那里接收数据并进行处理。我选择RabbitMQ作为消息代理。我的测试结果显示不是最好的: 发送-100 msg 生产-100味精/秒 消耗-6味精/秒 为了解决这个问题,我设置了listenerContainer.setAcknowledgeMode(AcknowledgeMode.NONE) 但我需要一些排队的人。我不能用worker并行处理,因为消息的顺序对于数据处理很重要 有可能提高接收速度吗 制作人: @Bean Queue queue() {

我需要创建一个应用程序,它应该从数据生产者那里接收数据并进行处理。我选择RabbitMQ作为消息代理。我的测试结果显示不是最好的:

发送-100 msg
生产-100味精/秒
消耗-6味精/秒

为了解决这个问题,我设置了listenerContainer.setAcknowledgeMode(AcknowledgeMode.NONE) 但我需要一些排队的人。我不能用worker并行处理,因为消息的顺序对于数据处理很重要

有可能提高接收速度吗

制作人:

@Bean
Queue queue() {
    return new Queue(queueName, false);
}

@Bean
public ConnectionFactory connectionFactory() {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory("ip");
    connectionFactory.setUsername("name");
    connectionFactory.setPassword("pswd");
    return connectionFactory;
}

@Bean
public AmqpAdmin amqpAdmin() {
    return new RabbitAdmin(connectionFactory());
}

@Bean
public RabbitTemplate rabbitTemplate() {
    return new RabbitTemplate(connectionFactory());
}

@Bean
public FanoutExchange exchange() {
    return new FanoutExchange("exchange-1");
}

@Bean
public Binding binding(){
    return BindingBuilder.bind(queue()).to(exchange());
}
@Bean
public ConnectionFactory connectionFactory() {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory("ip");
    connectionFactory.setUsername("name");
    connectionFactory.setPassword("pswd");
    return connectionFactory;
}

@Bean
public RabbitTemplate rabbitTemplate() {
    return new RabbitTemplate(connectionFactory());
}

@Bean
Queue queue() {
    return new Queue("queue-1", false);
}

@Bean
public SimpleMessageListenerContainer listenerContainer() {
    SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer();
    listenerContainer.setConnectionFactory(connectionFactory());
    listenerContainer.setQueues(queue());
    listenerContainer.setMessageListener(new Receiver());
    listenerContainer.setAcknowledgeMode(AcknowledgeMode.AUTO);
    return listenerContainer;
}

消费者:

@Bean
Queue queue() {
    return new Queue(queueName, false);
}

@Bean
public ConnectionFactory connectionFactory() {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory("ip");
    connectionFactory.setUsername("name");
    connectionFactory.setPassword("pswd");
    return connectionFactory;
}

@Bean
public AmqpAdmin amqpAdmin() {
    return new RabbitAdmin(connectionFactory());
}

@Bean
public RabbitTemplate rabbitTemplate() {
    return new RabbitTemplate(connectionFactory());
}

@Bean
public FanoutExchange exchange() {
    return new FanoutExchange("exchange-1");
}

@Bean
public Binding binding(){
    return BindingBuilder.bind(queue()).to(exchange());
}
@Bean
public ConnectionFactory connectionFactory() {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory("ip");
    connectionFactory.setUsername("name");
    connectionFactory.setPassword("pswd");
    return connectionFactory;
}

@Bean
public RabbitTemplate rabbitTemplate() {
    return new RabbitTemplate(connectionFactory());
}

@Bean
Queue queue() {
    return new Queue("queue-1", false);
}

@Bean
public SimpleMessageListenerContainer listenerContainer() {
    SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer();
    listenerContainer.setConnectionFactory(connectionFactory());
    listenerContainer.setQueues(queue());
    listenerContainer.setMessageListener(new Receiver());
    listenerContainer.setAcknowledgeMode(AcknowledgeMode.AUTO);
    return listenerContainer;
}


在具有2个vCPU和4 Gb内存的实例上进行了测试。

您可以增加容器的
预取计数,这将大大提高性能。但是,如果拒绝并重新获取消息,则将丢失排序(重新获取的消息将位于预取消息的后面)