考虑以下Camel路线:
from("file://....?moveFailed=/failed")
.resequence(c).stream()
.throwException(new Exception());
我希望文件使用者将处理过的文件移动到'/ failed'文件夹,因为发生了异常。事实并非如此。
由于StreamResequencer使用新线程来传递重新排序的文件(请参阅stacktrace),因此异常永远不会传播到文件使用者。
...
at org.apache.camel.processor.StreamResequencer$Delivery.run(StreamResequencer.java:262)
我很感激如何确保错误导致文件移动失败的一些帮助/反馈?
答案 0 :(得分:0)
我们使用选项2,因为选项1不可行。事实证明它工作得很好,代码仍然清晰。我们按如下方式重新修改了这条路线:
onException(Exception.class)
.handled(true)
.to("direct:moveFile");
from("file://....")
.setProperty("originalContent", body())
.resequence(c).stream()
.to("businessLogicHere")
.to("direct:moveFile");
from("direct:moveFile")
.choice()
.when(property(Exchange.EXCEPTION_CAUGHT).isNull())
.setBody(property("originalContent")
.setHeader(Exchange.FILE_NAME, simple("success/${file:onlyname}")
.to("file://...")
.otherwise()
.setBody(property("originalContent")
.setHeader(Exchange.FILE_NAME, simple("failure/${file:onlyname}")
.to("file://...")