我有一个 Camel 路由,需要将一个大文件(60 万行 ID)拆分为 60 万条单独的消息,然后将它们推送到 Activemq 队列中。如何优化 Camel 端的路由以提高吞吐量?我目前正在实现 ~150 条消息/秒的 AMQ 吞吐量。这是路线目前的样子。任何建议表示赞赏!
from("file://directory")
.split().jsonpath("$.ids").streaming().parallelProcessing()
.log(LoggingLevel.INFO, "Split: ${body}")
.to("activemq:queue:myqueue");
最佳答案
首先,正如@Bedla 所指出的,池化您的连接(即将您的连接工厂包装在 org.apache.activemq.pool.PooledConnectionFactory
中)。!根据网络条件、消息大小等,它很可能会给您带来 x10 到 x100 范围内的吞吐量提升。对于较小的消息则更多。
然后,在寻找吞吐量时,将 600k 行中的每一行都转储到日志文件中对任何人都没有好处。将其删除或至少将其置于跟踪/调试级别。
如果您的代理位于其他地方,例如世界的其他地方,或者网络延迟通常很差的地方,请考虑在 ConnectionFactory 设置上使用异步调度。它不会等待发送的每条消息的确认往返。
然后最后,如果以上都没有给出像样的结果(我认为只有一个池应该这样做)关闭消息持久性。代理磁盘可能是低规范/旧服务器的瓶颈。甚至还进行了调整以增强某些操作系统/存储组合的性能。
关于apache-camel - Apache Camel 拆分大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51274110/