我想使用apache camel文件组件。
我要求不同文件夹中有多个文件。 我想按顺序读取这些目录下的文件(基于时间戳)。
注意:所有这些目录都是根目录的子目录。
例如: root -
/dir1 - file1, file2, file3 /dir2 - file4, file5, file6
我需要的是,
1个线程应该根据时间戳读取dir1中的所有文件,其他线程应该从dir2读取。
我现在正在做的是,
from("file:/root/?recursive=true&sortBy=file:modified").threads(10).to("another component");
但这不是我想要的方式,而是将不同的线程分配给不同的文件,因此无法实现处理顺序。
请告诉我如何达到我的要求。
答案 0 :(得分:2)
您需要使用动态路由器根据文件所在的目录路由到不同的使用者。例如,假设您需要并行运行三个处理器:
from("file:/root?sortBy=file:modified)
.to("myDynamicRouter")
from("seda:myQueue0")
.to("myProcessor")
from("seda:myQueue1")
.to("myProcessor")
from("seda:myQueue2")
.to("myProcessor")
MyDynamicRouter是一个路由器,它将根据文件目录返回SEDA队列的名称(参见http://camel.apache.org/dynamic-router.html)
例如
public void process(File file) {
String queueName = "seda:MyQueue" + (file.getParent().hashCode() % 3);
return queueName;
}
因此,将按日期顺序从不同目录中读取所有文件。当他们进入各种seda队列时,他们将保持日期顺序。由于同一目录中的所有文件都放在同一个队列中,因此将按日期顺序处理它们。
需要注意的是,来自不同目录的文件可以在同一处理器中交错在一起。如果没有大量的工作和一些阻止,那么只需要在处理器编码时就必须考虑到这一点。