Apache camel csv文件到SQL路由的性能问题和优化
对骆驼来说很陌生,但到目前为止很有趣 我使用它来处理FTP:d到特定目录的csv文件,解析它们,然后将数据放在相关的MySql db表中(都在同一台主机上) 我有一个简单的CamelContext,其中包含4个路由,每个路由处理不同的文件类型,并将解析的数据放在其关联的表中。这些文件中的许多文件每15分钟就会出现在FTP目录中(时钟为15、30、45、00分钟) camel上下文注册表只有一个条目,即数据源(org.mariadb.jdbc.MySQLDataSource提供的一个简单的Mysql数据源…我们正在迁移到MaraiDb) 4条路由中的每一条都遵循以下模式,仅在“from file”名称模式和处理器选择上有所不同:Apache camel csv文件到SQL路由的性能问题和优化,apache-camel,Apache Camel,对骆驼来说很陌生,但到目前为止很有趣 我使用它来处理FTP:d到特定目录的csv文件,解析它们,然后将数据放在相关的MySql db表中(都在同一台主机上) 我有一个简单的CamelContext,其中包含4个路由,每个路由处理不同的文件类型,并将解析的数据放在其关联的表中。这些文件中的许多文件每15分钟就会出现在FTP目录中(时钟为15、30、45、00分钟) camel上下文注册表只有一个条目,即数据源(org.mariadb.jdbc.MySQLDataSource提供的一个简单的Mysq
from("file:" + FilePath + "?include=(.*)dmm_all(.*)csv.gz&" + fileAction + "&moveFailed=" + FaultyFilePath)
.routeId("myRoute")
.unmarshal().gzip()
.unmarshal().csv()
.split().body()
.process(myProcessor)
.choice()
.when(simple("${header.myResult} != 'header removed'"))
.to("sql:" + insertQuery.trim() + "?dataSource=sqlds")
.end();
每个处理器只需删除文件头(列名),并将insert的主体设置为与给定insert查询关联的MySql表
对于传入的文件,它就像一个符咒
但是,当应用程序/Camel进程未启动时,FTP目录中可能会充满大量文件。
在这种情况下启动应用程序是在出现性能问题时
我获得了以下具有特定文件数量阈值的异常:
Cause: org.springframework.jdbc.CannotGetJdbcConnectionException:
Could not get JDBC Connection;
nested exception is java.sql.SQLNonTransientConnectionException:
Could not connect to localhost:3306 : Cannot assign requested address
我试着在每条路线上增加一个延误,它进展顺利,但速度慢得令人痛苦
我猜测(疯狂地……我可能会补充)路由线程(如果camel是如何处理每个路由的线程的?)和数据源的单个db连接之间存在争用
如果是这样的话,解决这个问题的最佳策略是什么(连接池?或者对所有路由使用一个共享线程,或者
在我上面使用的Camel场景中,还有哪些其他策略可以提高性能
非常感谢您的任何意见和反馈
干杯。是的,听起来您需要JDBC的连接池,这样您就可以同时访问数据库了。谢谢您的评论。很高兴知道我的分析没有错。