Java 动态“自”端点和交换在camel中如何工作?

Java 动态“自”端点和交换在camel中如何工作?,java,apache-camel,Java,Apache Camel,我有点纠结于动态路由概念和消费者规则 假设我有一个带有exchange数据的路由,然后我想在from端点的不同路由中使用来自exchange的头 我想它会像这样: from("timer:trigger?repeatCount=1") .routeId("define-file-name") .setHeader("myHeader", constant("file.txt")) .to("direct:start"); 一号干线: from("file:/dir1") ... .to ("d

我有点纠结于动态路由概念和消费者规则

假设我有一个带有exchange数据的路由,然后我想在from端点的不同路由中使用来自exchange的头

我想它会像这样:

from("timer:trigger?repeatCount=1")
.routeId("define-file-name")
.setHeader("myHeader", constant("file.txt"))
.to("direct:start");
一号干线:

from("file:/dir1")
...
.to ("direct:start");
二号干线:

from("direct: start")//get the old exchange data
.from("file:/dir1/?fileName=${header.myHeader}")//start consuming from a different endpoint using old exchange data
...
.to("direct: end);
所以这些步骤对我来说似乎是正确的,但我觉得我有点污染了交易

对我来说,我使用动态路由,但同时也创建了一个新的消费者。这意味着我正在创建一个新的交易所,对吗?那么,骆驼如何知道在剩下的路线中选择和使用哪种交换呢

起初我认为它可能将它们结合在一起,但我做了更多的挖掘,发现您实际上需要使用enrich来添加到现有的exchange中


有人能解释一下camel是如何处理这种情况的吗?如果你有一个很好的例子。我在camel包中搜索了一个,但没有成功。

您可以使用模式实现动态

假设您的第一条路由用于将文件名添加到头中,例如:

from("timer:trigger?repeatCount=1")
.routeId("define-file-name")
.setHeader("myHeader", constant("file.txt"))
.to("direct:start");
然后,您的第二个路由可以使用来自exchange标头的信息轮询该文件,如下所示

from("direct:start")
.routeId("poll-file")
.pollEnrich().simple("file://dir1?fileName=${in.header.myHeader}").timeout(10000)
.log("${body}");

您可以使用模式从中实现动态

假设您的第一条路由用于将文件名添加到头中,例如:

from("timer:trigger?repeatCount=1")
.routeId("define-file-name")
.setHeader("myHeader", constant("file.txt"))
.to("direct:start");
然后,您的第二个路由可以使用来自exchange标头的信息轮询该文件,如下所示

from("direct:start")
.routeId("poll-file")
.pollEnrich().simple("file://dir1?fileName=${in.header.myHeader}").timeout(10000)
.log("${body}");

是否为特定版本?我读过,但我认为不是。但是我得到了一个没有这样的方法错误。使用动态URI出现在Camel2.16.0中。在那之前,你不能使用当前的交换数据。哦,好的。这就是它不起作用的原因。我用的是2.15.5。我不想在我的问题中提到这一点。很抱歉谢谢你的时间。这是特定版本的吗?我读过,但我认为不是。但是我得到了一个没有这样的方法错误。使用动态URI出现在Camel2.16.0中。在那之前,你不能使用当前的交换数据。哦,好的。这就是它不起作用的原因。我用的是2.15.5。我不想在我的问题中提到这一点。很抱歉谢谢你抽出时间。