apache-camel - Apache Camel 分割大文件
问题描述
我有一个骆驼路线,需要将一个大文件(60 万行 id)拆分为 60 万条单独的消息,然后将它们推送到 Activemq 队列中。如何优化从骆驼一侧的路线以增加吞吐量?我目前正在为 AMQ 实现约 150 条消息/秒的吞吐量。这是当前路线的样子。任何建议表示赞赏!
from("file://directory")
.split().jsonpath("$.ids").streaming().parallelProcessing()
.log(LoggingLevel.INFO, "Split: ${body}")
.to("activemq:queue:myqueue");
解决方案
首先,正如@Bedla 指出的那样,将您的连接池化(即将您的连接工厂包装在 a 中org.apache.activemq.pool.PooledConnectionFactory
)。!根据网络条件、消息大小等,它很可能会给您带来 x10 到 x100 范围内的吞吐量提升。对于较小的消息来说更多。
然后,在寻找吞吐量时,将 600k 行中的每一行都转储到您的日志文件中没有任何好处。将其删除或至少将其置于跟踪/调试级别。
如果您的代理位于其他地方,例如世界其他地方,或者一般网络延迟较差的地方,请考虑在 ConnectionFactory 设置上使用异步调度。它不会等待对发送的每条消息的确认往返。
最后,如果以上都没有给出像样的结果(我认为只是一个池应该做的)关闭消息持久性。代理磁盘可能是低规格/旧服务器的瓶颈。甚至还有一些调整可以增强某些操作系统/存储组合的性能。
推荐阅读
- sql-server - 是否可以查询数据库中的所有表以及主键列及其最大值、最小值和计数?
- xamarin.ios - Xamarin.Firebase.iOS.CloudMessaging 在 Messaging.SharedInstance.Delegate 上失败
- python - 尝试安装 more_itertools 时出现“默认为用户安装,因为普通站点包不可写”错误。建议?
- navbar - 我的引导页面不断将我引导到页面底部
- javascript - 折线图中带过滤器的 D3
- java - 春天的特点和意义?
- html - 从页脚底部删除空格?
- abap - 为什么会出现运行时错误 DBSQL_DBSL_LENGTH_ERROR?
- macos - React Nativa 他命令 pod install 在 macOS 中导致错误
- python - 从 cmd 运行时没有名为“制表”的模块