File apachecamel的排序问题
我们有一个应用程序,我们使用ApacheCamel的文件组件。我们使用#sorter实现了我们自己的比较器。文件组件从四个不同的文件夹中读取文件并对其进行排序。 我们将maxmessagesPerPoll设置为0,将maxmessagesPerPoll设置为false。 当四个文件夹中的文件总数在1k到5k之间时,就会出现下面描述的问题 Camel显然有两个线程:线程1和线程2,通常线程1运行排序代码,线程2处理文件。但当有1k到5k文件或更多甚至更多的文件时,线程#1开始处理,这会导致文件出现故障。请参阅清单1中的日志,以查看线程1和线程2如何处理文件的示例 仅供参考,所有5000个文件的初始排序由线程#1完成,但在处理过程中,线程#1有时也会帮助处理文件,从而导致文件无序。如果文件数很低,如200个,则不会发生这种情况。只有线程2处理文件 如何使处理仅限于线程2,是否有可设置的属性? 清单1File apachecamel的排序问题,file,apache-camel,File,Apache Camel,我们有一个应用程序,我们使用ApacheCamel的文件组件。我们使用#sorter实现了我们自己的比较器。文件组件从四个不同的文件夹中读取文件并对其进行排序。 我们将maxmessagesPerPoll设置为0,将maxmessagesPerPoll设置为false。 当四个文件夹中的文件总数在1k到5k之间时,就会出现下面描述的问题 Camel显然有两个线程:线程1和线程2,通常线程1运行排序代码,线程2处理文件。但当有1k到5k文件或更多甚至更多的文件时,线程#1开始处理,这会导致文件出现
20200829 13:45:00.516 - [Camel (xyz) **thread #1** - file:///export/data/abc/xyz/zyz] INFO a.b.c.Transformer - Processing started for file /export/data/abc/xyz/zyz//f/g/h../run/file1.xml
20200829 13:45:00.576 - [Camel (xyz) **thread #1** - file:///export/data/abc/xyz/zyz] INFO a.b.c.Transformer - Processing completed for file /export/data/abc/xyz/zyz//f/g/h../run/file1.xml in 0 seconds
20200829 15:15:14.910 - [Camel (xyz) **thread #2** - Threads] INFO a.b.c.Transformer - Processing started for file /export/data/abc/xyz/zyz/g/f/h../run/file2_XML
20200829 15:15:15.007 - [Camel (xyz) **thread #2** - Threads] INFO a.b.c.Transformer - Processing completed for file /export/data/abc/xyz/zyz/g/f/h../run/file2_XML in 0 seconds
我尝试了以下建议-
使用maxMessagersPerPoll=1并设置maxmessagesperpoll=false
如这里所见
但这也带来了自身的问题。假设有3000个文件,它会处理一个文件,然后调用其余的文件,这大大降低了整个过程的速度,因为排序需要45分钟以上。这方面的秘诀是使用apache camel的File2组件文档中描述的同步查询选项。总有两条线。使用同步后,只有线程2处理文件,而不是线程1。 另外,将maxMessagesPerPoll保留为0,将maxMessagesPerPoll保留为true 我不得不说,camel的文档很差,而且语法上也有错误