Apache Camel 中的动态路由器 URI
Dynamic Router URI in Apache Camel
我正在阅读 "Camel in Action" 书的第 8 章并使用动态路由器进行测试。我定义了两条路线如下:
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;
}
}
代码按照书中描述的方式工作...但我认识到的问题是,如果我 return 端点 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;
}
是不是Camel的DynamicRouter的特性要求在URI中间加上“//”?我在这本书或骆驼官方网站上搜索,但似乎没有提到这个......如果是的话,这背后有什么原因吗?
是的,Camel 中的端点被格式化为 name://context-path?options
,例如那些双斜杠。因此,如果您将其与书中的内容进行比较。
我正在阅读 "Camel in Action" 书的第 8 章并使用动态路由器进行测试。我定义了两条路线如下:
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;
}
}
代码按照书中描述的方式工作...但我认识到的问题是,如果我 return 端点 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;
}
是不是Camel的DynamicRouter的特性要求在URI中间加上“//”?我在这本书或骆驼官方网站上搜索,但似乎没有提到这个......如果是的话,这背后有什么原因吗?
是的,Camel 中的端点被格式化为 name://context-path?options
,例如那些双斜杠。因此,如果您将其与书中的内容进行比较。