我的目标是向一个交易所发布50000条消息,我使用RabbitTemplate.convertAndSend
循环发送每条消息。
由于这个过程花费了大量的时间,我开始寻找一种方法来减少它。我运行BatchingRabbitTemplate
,以下面的方式创建和配置它:
BatchingStrategy strategy = new SimpleBatchingStrategy(1000, 1100, 3_000);
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(30);
scheduler.initialize();
rabbitTemplate = new BatchingRabbitTemplate(strategy, scheduler);
并继续发送循环中的每条消息:
for (int i = 0; i < 50000; i++) {
...
rabbitTemplate.convertAndSend("my-exchange", "*.my-key.*", message);
}
但我没有注意到任何速度增加之后。当我使用
BatchingStrategy strategy = new SimpleBatchingStrategy(1000, Integer.MAX_VALUE, 30_000);
甚至比使用简单的RabbitTemplate
还要糟糕。看来我没有正确配置它。如果有人能解释一下为什么它没有带来预期的发布速度提高和/或建议一个解决方案,那就太好了。
1条答案
按热度按时间rnmwe5a21#
看起来您的
BatchingRabbitTemplate
不是Bean。而且您没有为它提供ConnectionFactory
。在
BatchingRabbitTemplate.send()
中放置调试断点并在发送这些消息时查看发生了什么非常简单。