2016-04-29 50 views
1

我有點掙扎與動態路由的概念和消費者規則。動態「來自」終端和交易所如何在駱駝中工作?

所以我們假設我有一個交換數據的路由,然後我想在「從」端點的不同路由中使用來自交換機的頭。

我認爲這將是這個樣子:

路線1:

​​

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

因此,這些措施似乎是正確的我,但我覺得林有點污染交流。

對我來說,我使用動態路由,但我也同時創建一個新的消費者。這意味着我正在創造一個新的交易所嗎?那麼,駱駝怎麼知道哪些交換在其餘路線上選擇和使用?

起初我認爲它可能將它們合併,但我做了更多的挖掘,發現你實際上需要使用「豐富」來添加到現有的交換中。

有人可以解釋駱駝如何處理這種情況?如果你有一個很好的例子。我在駱駝包裹裏搜索了一件沒有成功的東西。

回答

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}"); 
+0

民意調查豐富駱駝版本具體?我讀過它,我不認爲它是。但我得到一個沒有這樣的方法錯誤。 – JustBlossom

+0

使用動態URI來自Camel 2.16.0。在此之前,您不能使用pollEnrich當前的交換數據。 – jnupponen

+0

噢好吧。這就是爲什麼它不起作用。我使用2.15.5。我不認爲把這些放在我的問題中。抱歉。謝謝你的時間。 – JustBlossom