我有一个骆驼路线,需要将一个大文件(600k行ID)分割成600k条单独的消息,然后将它们推送到Activemq队列中。如何优化骆驼方面的路线以增加吞吐量?我目前达到AMQ的〜150消息/秒吞吐量。这是当前路线的样子。任何建议表示赞赏!
from("file://directory")
.split().jsonpath("$.ids").streaming().parallelProcessing()
.log(LoggingLevel.INFO, "Split: ${body}")
.to("activemq:queue:myqueue");
答案 0 :(得分:1)
首先,如@Bedla所指出的那样,汇集您的连接(即,将连接工厂包装在org.apache.activemq.pool.PooledConnectionFactory
中)!根据网络条件,消息大小等,它很可能使您的吞吐量提高x10到x100。对于较小的消息,更多。
然后,当寻找吞吐量时,将60万行的每一行都转储到您的日志文件中将无济于事。删除它或至少使其处于跟踪/调试级别。
如果您的代理人位于其他地方,例如世界的其他地方,或者通常是网络延迟较差的地方,请考虑对ConnectionFactory设置使用异步调度。它不会等待对发送的每个消息的确认往返。
然后,最后,如果以上方法均未提供令人满意的结果(我认为只是池应做),请关闭消息持久性。对于低规格/旧服务器,代理磁盘可能是瓶颈。甚至进行了一些调整,以增强某些OS /存储组合的性能。