【发布时间】:2016-08-27 01:27:36
【问题描述】:
当我在处理器中抛出/捕获异常时,防止原始文件被重命名时遇到了一点问题。
我有这样的路线:
<route customId="true" id="localRoute">
<from uri="{{ftp.pull.LOCAL.server}}" />
<process ref="Processor" />
<to uri="{{ftp.push.LOCAL.route}}" />
</route>
from URI 包含以下选项:&move=${file:name.noext}.${file:name.ext}.old
在我的过程中,我阻止了 Exchange 在某些条件下被路由到最后,并且还抛出了一个我使用捕获的异常:
<onException>
<exception>com.myException.ThrownException</exception>
<handled><constant>true</constant></handled>
</onException>
如果我抛出并捕获该异常,是否有任何方法可以防止重命名我从中提取的原始文件?
(我抛出并捕获该异常是为了防止文件进入其他路由的幂等文件存储库。许多路由都使用此处理器。)
【问题讨论】:
-
如果不处理异常会怎样?如果抛出异常,它是否仍然重命名文件?
-
如果我删除整个 onException 块,它不会重命名文件并将大错误消息打印到日志中
-
您希望文件保留(您可以使用 moveFailed)仅将失败的文件移动到某处吗?您是否需要处理异常?换句话说:骆驼不会知道它失败了?
-
我不希望文件移动到任何地方。基本上我在想我正在寻找的是相当于回滚,如果使用“移动”那么不要重命名文件,或者如果使用幂等文件回购不要将名称放入回购中。基本上就像这次没有轮询文件一样,如果这有意义吗?
-
我认为问题出在手柄部分。如果您处理异常,我不确定是否会发生回滚。您可以不处理异常,而是尝试捕获,如果捕获异常,则只需记录或创建响应或其他内容。这应该可以防止重命名。
标签: java apache-camel