我设置了Apache Camel Route,它从FTP服务器读取XML文件,将内容转换为Java对象,将创建的Java对象聚合到一个List中,然后将List转储到一个Direct对象中以供ConsumerTemplate读取。要处理的文件数量为10。
这是我的路线:
JAXBContext jaxbContext = JAXBContext.newInstance(new Class[]{Dokumente.class});
JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
jaxbDataFormat.setContext(jaxbContext);
from("ftp://tstusr@localhost/uploads/Replies?delete=true&password=ftpServPW&passiveMode=true&binary=true&disconnect=true")
.unmarshal(jaxbDataFormat)
.aggregate(AggregationStrategies.flexible(Dokumente.class).accumulateInCollection(LinkedList.class))
.constant(true)
.completionSize(10)
.to("direct:files");
Route正在做它应该做的事情,除了“delete=true”部分。当我的目录中的文件少于10个时,程序进入无限循环。在我的本地FTP测试服务器(FileZilla Server)中,我可以看到它登录,更改目录,执行LIST命令,然后退出。它在无限循环中反复这样做。
我如何修复路由以阻止它这样做?我不知道目录中有多少文件。这意味着总是可以少于批处理大小。我使用的是Apache Camel 3.11.4版。
1条答案
按热度按时间acruukt91#
问题在于,如果可用文件少于指定的文件数量,则路由会一直等待缺少的文件出现。
因此,如果它被告知要下载10个文件,但只有2个存在,它将等待8个丢失的文件。
我必须手动终止路由,首先给它一个ID。然后我必须设置路由选项sendEmptyMessageWhenIdle=true,并附加一个处理器,当收到空消息时,它会停止路由。由于空消息没有任何作用,我随后将其过滤掉,然后强制com。调整后的路由如下所示