以成功路线为先决条件的路线(Camel)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以成功路线为先决条件的路线(Camel)相关的知识,希望对你有一定的参考价值。
我目前有以下骆驼路线:
//Only continue to next route if success
from("file:///tmp/camel/input")
.routeId("Test Route")
.to("file:///tmp/camel/test")
.onCompletion().onCompleteOnly()
.log("Success for file: ${header.CamelFileName}")
.setHeader("recipientList", constant("file:///tmp/camel/output, file:///tmp/camel/output2"))
.recipientList(header("recipientList"))
.end();
仅当前一个路由成功时才需要将文件发送给收件人。
但是,在运行路由时,我得出的结论是onCompletion()块中的.to也从输入文件夹中读取,但文件已经消失,因此无法将它们拾取并将它们写入收件人。 (我不能在from上设置noop = true,因为我确实希望文件在发送给收件人之后消失了......)
那么我们如何将文件路由到收件人,并将成功的先前路由作为先决条件?
答案
这会奏效
from("file:///tmp/camel/input")
.routeId("Test Route")
.to("file:///tmp/camel/test?noop=true")
.onCompletion().onCompleteOnly()
.log("Success for file: ${header.CamelFileName}")
.end();
from("file:///tmp/camel/test?noop=true")
.to("file:///tmp/camel/output")
.to("file:///tmp/camel/output2");
我觉得OnCompletion
在这里是多余的,因为如果传输到/camel/test
的文件失败,第二条路线将不会触发。
另一点是你可以使用move=.done
选项只是为了确保在传输完整文件之前第二条路线没有启动
from("file:///tmp/camel/test?noop=true&move=.done")
.to("file:///tmp/camel/output")
.to("file:///tmp/camel/output2")
以上是关于以成功路线为先决条件的路线(Camel)的主要内容,如果未能解决你的问题,请参考以下文章
如何将属性与 Spring XML 中 Apache Camel 路由中的(布尔)文字进行比较?