gpt4 book ai didi

java - RabbitMQ接收速度慢

转载 作者:行者123 更新时间:2023-11-30 06:26:38 26 4
gpt4 key购买 nike

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

已发送 - 100 条消息;
生成 - 100 条消息/秒;
消耗 - 6 条消息/秒;

为了解决这个问题,我设置了listenerContainer.setAcknowledgeMode(AcknowledgeMode.NONE);但我需要确认一些队列。而且我无法使用工作人员并行执行此操作,因为消息的顺序对于数据处理很重要。

是否可以提高接收、确认的速度?

制作人:

@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());
}

...

rabbitTemplate.setExchange("exchange-1");
rabbitTemplate.convertAndSend(data);

消费者:

@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;
}

...

@Override
public void onMessage(Message message) {
System.out.println("Received message: " + fromBytes(message.getBody()) + " \n Time = " + System.currentTimeMillis());
}

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

最佳答案

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

关于java - RabbitMQ接收速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47075940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com