我在动态路由概念和消费者规则方面苦苦挣扎。
所以假设我有一个包含交换数据的路由,然后我想在“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如何处理这种情况?如果你有一个很好的例子。我在骆驼包中搜索了一个没有成功。
答案 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}");