Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File apachecamel的排序问题_File_Apache Camel - Fatal编程技术网

File apachecamel的排序问题

File apachecamel的排序问题,file,apache-camel,File,Apache Camel,我们有一个应用程序,我们使用ApacheCamel的文件组件。我们使用#sorter实现了我们自己的比较器。文件组件从四个不同的文件夹中读取文件并对其进行排序。 我们将maxmessagesPerPoll设置为0,将maxmessagesPerPoll设置为false。 当四个文件夹中的文件总数在1k到5k之间时,就会出现下面描述的问题 Camel显然有两个线程:线程1和线程2,通常线程1运行排序代码,线程2处理文件。但当有1k到5k文件或更多甚至更多的文件时,线程#1开始处理,这会导致文件出现

我们有一个应用程序,我们使用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,是否有可设置的属性?

清单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的文档很差,而且语法上也有错误