Apache Camel中的动态路由器URI

问题描述:

我遵循“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的中间添加“//”吗?我搜索了这本书或骆驼官方网站,但似乎没有提到这个...如果是的话,背后的原因是什么?

Camel中的终点被格式化为name://context-path?options,例如双斜杠。所以如果你比较一下这本书。

+0

感谢您的回答......只是想确认一下......动态路由器会自动使用双斜线重新格式化这些端点URI?我从https://github.com/camelinaction/camelinaction下载了动作示例代码中的骆驼,除了DynamicRouterBean示例 – xlogger

+0

以外,大部分示例代码都使用不带双斜杠的URI。例如,当Camel提供上述参数时,例如骆驼只要不是你硬编码的价值。当你指定一个URI时,你可以省略双斜线。 –