Apache camel csv文件到SQL路由的性能问题和优化

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

对骆驼来说很陌生,但到目前为止很有趣

我使用它来处理FTP:d到特定目录的csv文件,解析它们,然后将数据放在相关的MySql db表中(都在同一台主机上)

我有一个简单的CamelContext,其中包含4个路由,每个路由处理不同的文件类型,并将解析的数据放在其关联的表中。这些文件中的许多文件每15分钟就会出现在FTP目录中(时钟为15、30、45、00分钟)

camel上下文注册表只有一个条目,即数据源(org.mariadb.jdbc.MySQLDataSource提供的一个简单的Mysql数据源…我们正在迁移到MaraiDb)

4条路由中的每一条都遵循以下模式,仅在“from file”名称模式和处理器选择上有所不同:

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的连接池,这样您就可以同时访问数据库了。谢谢您的评论。很高兴知道我的分析没有错。