我看起来相当简单
sftp://hostname:22//incoming/folder/location/?username=username&password=xxxxx
&localWorkDirectory=/tmp&readLock=changed&readLockCheckInterval=2000
&move=processed/$simple{date:now:yyyy}/$simple{date:now:MM}/$simple{date:now:dd}${file:name}
&consumer.delay=450000&stepwise=false&streamDownload=true&disconnect=true
我也有一个onException子句
onException(ValidationException.class)
.handled(true)
.logStackTrace(true)
.filter(header("VALIDATION_ERROR").isEqualTo(true))
.choice()
.when(header("CamelFileName").contains("Param1"))
.to(sftp://hostname:22//One/error/folder?password=xxxxxx&username=username)
.when(header("CamelFileName").contains("Param2"))
.to(sftp://hostname:22//Two/error/folder?password=xxxxxx&username=username)
.endChoice();
当我有单个文件时,路径似乎按预期工作。当出现多个文件和异常时,我会遇到许多不同的异常,例如
org.apache.camel.component.file.GenericFileOperationFailedException: Cannot list directory: incoming/folder/location
Caused by: java.lang.IndexOutOfBoundsException
我尝试使用路线中提到的所有属性。 streamDownload,stepwise,readLock,localWorkDirectory等。但是,多个文件不起作用时的错误处理。我看到第一个文件被处理了。但是,一旦发生异常,它就不会移动到已处理的文件夹,然后 incoming / folder / location 变为不可列表。我尝试使用 continue(true) ,而不是 处理(true)
答案 0 :(得分:1)
问题在于在同一个交换中处理多个文件。在例外情况下,路由尝试在同一服务器上FTP回错误文件。解决方案是将主体分成多个交换,以便每个文件都有自己的交换并单独处理它们。
from(sftp://hostname:22//incoming/folder/location/?username=username&password=xxxxx
&localWorkDirectory=/tmp&readLock=changed&disconnect=true&stepwise=false
&move=processed/$simple{date:now:yyyy}/$simple{date:now:MM}/$simple{date:now:dd}${file:name}
&consumer.delay=450000).split(body()).processRef("incomingProcessor").end();