Java RabbitMQ接收速度慢
我需要创建一个应用程序,它应该从数据生产者那里接收数据并进行处理。我选择RabbitMQ作为消息代理。我的测试结果显示不是最好的: 发送-100 msgJava 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() {
生产-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内存的实例上进行了测试。您可以增加容器的
预取计数,这将大大提高性能。但是,如果拒绝并重新获取消息,则将丢失排序(重新获取的消息将位于预取消息的后面)