动态“来自”端点和交换如何在驼峰中工作?

时间:2016-04-29 21:53:27

标签: java apache-camel

我在动态路由概念和消费者规则方面苦苦挣扎。

所以假设我有一个包含交换数据的路由,然后我想在“from”端点的不同路由中使用来自交换的头。

我认为它看起来像这样:

路线1:

from("file:/dir1")
...
.to ("direct:start");

路线2:

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);

所以这些步骤似乎对我而言,但我觉得我有点污染交易所。

对我来说,我使用的是动态路由,但我也在同时创建一个新的消费者。这意味着我创造了一个新的交换权利?那么,骆驼如何知道在其余路线中选择和使用哪个交换?

起初我认为它可能会合并它们,但我做了一些挖掘,发现你确实需要使用“充实”来添加到现有的交换中。

有人可以解释一下camel如何处理这种情况?如果你有一个很好的例子。我在骆驼包中搜索了一个没有成功。

1 个答案:

答案 0 :(得分:4)

您可以使用Content Enricher模式实现“动态起源”。

假设您的第一个路由用于向标头添加文件名,例如:

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

然后你的第二条路线可以使用交换标题中的信息来轮询该文件。

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