2015-07-13 292 views
1

我遵循「Camel in Action」一書的第8章並使用動態路由器進行測試。我已經定義瞭如下兩種途徑:Apache Camel中的動態路由器URI

from("direct:start") 
.dynamicRouter(method(DynamicRouterBean.class, "route")) 
.log("dynamicRoute result = ${body}"); 

from("seda:a") 
.log("In direct:a with message ${body}"); 

而在DynamicRouterBean的路線的方法,我已經實現路徑的邏輯如下:

public String route(String body, @Header(Exchange.SLIP_ENDPOINT) String previous) { 
    System.out.println("Enter DynamicRouterBean, body=" + body + ", previous=" + previous); 
    if (previous == null) { 
     return "seda://a"; 
    } else if ("seda://a".equals(previous)) { 
     return "language://simple:Bye ${body}"; 
    } else { 
     // no more, so return null to indicate end of dynamic router 
     return null; 
    } 
} 

代碼工作描述書......但問題我認識到,如果我在路徑方法的中間返回沒有雙斜槓「//」的端點URI,則檢查前一個等於「seda:a」的第二個條件將失敗,因此動態路由將在那裏停止

if (previous == null) { 
     return "seda:a"; 
    } else if ("seda:a".equals(previous)) { 
     // This condition will not match... and it will return null 
     return "language:simple:Bye ${body}"; 
    } else { 
     // no more, so return null to indicate end of dynamic router 
     return null; 
    } 
if (previous == null) { 
     return "seda:a"; 
    } else if ("seda:a".equals(previous)) { 
     // This condition will not match... and it will return null 
     return "language:simple:Bye ${body}"; 
    } else { 
     // no more, so return null to indicate end of dynamic router 
     return null; 
    } 

Camel的DynamicRouter需要在URI的中間添加「//」嗎?我搜索了這本書或駱駝官方網站,但似乎沒有提到這個...如果是的話,背後的原因是什麼?

回答

0

Camel中的終點被格式化爲name://context-path?options,例如雙斜槓。所以如果你比較一下這本書。

+0

感謝您的回答......只是想確認一下......動態路由器會自動使用雙斜線重新格式化這些端點URI?我從https://github.com/camelinaction/camelinaction下載了動作示例代碼中的駱駝,除了DynamicRouterBean示例 – xlogger

+0

以外,大部分示例代碼都使用不帶雙斜槓的URI。例如,當Camel提供上述參數時,例如駱駝只要不是你硬編碼的價值。當你指定一個URI時,你可以省略雙斜線。 –