2013-09-24 136 views
2

我試圖攔截一個端點,其中URI的值與交換頭中的某些信息相匹配。動態攔截駱駝端點

假設我在標題中有一個字段叫做DatabaseName。我想強制執行一個特定的路由只寫入標題中指定的數據庫。

我可以這樣做嗎?

interceptSendToEndpoint("mock:${in.header.DatabaseName}") 

我試過了,但它似乎沒有工作。我有什麼選擇?

我還想到做這樣的事情的:

interceptSendToEndpoint("mock:*").when(...)? 

但在這種情況下,我不知道如果我能在表達時引用截獲節點的URI。

感謝

回答

3

您可以攔截使用通配符和結合起來,與何時做你想要什麼,看到的細節:http://camel.apache.org/intercept

的是報頭上的關鍵字Exchange.INTERCEPTED_ENDPOINT(CamelInterceptedEndpoint)具有截獲的端點uri。你可以在何時使用它來匹配謂詞。有點像:

interceptSendToEndpoint("mock:*") 
    .when(simple("${header.CamelInterceptedEndpoint} == ${in.header.DatabaseName}")) 
    ... 
+0

謝謝。這是我在你的輸入之後嘗試的。 (簡單的(「$ {header.CamelInterceptedEnd point} == $ {in.header.DatabaseName}」))。skipSendToOriginalEndpoint()。(「mock:detour 「).tran sform(常量(」路由中斷Bye世界「));'然後我有一個腳本看起來像這樣:'from(」direct:start「)。setHeader(」DatabaseName「,constant(」mock:/ /delta").to("mock:detournement").transform(constant("Route not interrupted「))」,headers)'。然而,我做了什麼,我繼續擊中「Route not interrupted」。任何線索? – Klaus

+0

發現問題。必須使用stop()來終止攔截的路線。 – Klaus