我已经同时启动了生产者和消费者。6小时后,生产者生产了大约6亿条消息进入队列,6小时后停止生产者,但消费者继续运行,即使运行18小时后,队列中仍有4亿条消息。有人能告诉我为什么消费者性能非常慢吗?
提前感谢!
@Bean
public SimpleMessageListenerContainer listenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory());
container.setQueueNames(this.queueName);
container.setMessageListener(new MessageListenerAdapter(new TestMessageHandler(), new JsonMessageConverter()));
return container;
}
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(
"localhost");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
return connectionFactory;
}
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
template.setMessageConverter(new JsonMessageConverter());
template.setRoutingKey(this.queueName);
template.setQueue(this.queueName);
return template;
}
public class TestMessageHandler {
// receive messages
public void handleMessage(MessageBeanTest msgBean) {
// Storing bean data into CSV file
}
}
2条答案
按热度按时间jdg4fx2g1#
按照Gary的建议,您可以如下设置它们。
i34xakig2#
根据维基百科,亿== 1000万,所以你的意思是6000万。
容器处理消息的速度只能与侦听器一样快-您需要分析对每条消息执行的操作。
您还需要试验容器并发设置(concurrentConsumers)、prefetch等,以获得最佳性能,但它最终仍然是您的侦听器占用了大部分处理时间;容器的开销非常小。如果侦听器的构造不好,增加并发性也没有什么帮助。
如果使用事务,则会显著降低消耗。
请尝试使用不处理消息的侦听器。
最后,在询问此类问题时,您应该始终显示配置。