如何在 Java 运行时添加骆驼路线?我找到了一个 Grails 示例,但我已经用 Java 实现了它。
我的 applicationContext.xml 已经有一些预定义的静态路由,我想在运行时向它添加一些动态路由。可能吗?因为包含动态路由的唯一方法是编写 route.xml,然后将路由定义加载到上下文中。它将如何在现有的静态路由上工作? 运行时路由
如何在 Java 运行时添加骆驼路线?我找到了一个 Grails 示例,但我已经用 Java 实现了它。
我的 applicationContext.xml 已经有一些预定义的静态路由,我想在运行时向它添加一些动态路由。可能吗?因为包含动态路由的唯一方法是编写 route.xml,然后将路由定义加载到上下文中。它将如何在现有的静态路由上工作? 运行时路由
您可以简单地在 CamelContext 上调用几个不同的 API 来添加路由......像这样
context.addRoutes(new MyDynamcRouteBuilder(context, "direct:foo", "mock:foo"));
....
private static final class MyDynamcRouteBuilder extends RouteBuilder {
private final String from;
private final String to;
private MyDynamcRouteBuilder(CamelContext context, String from, String to) {
super(context);
this.from = from;
this.to = to;
}
@Override
public void configure() throws Exception {
from(from).to(to);
}
}
有关完整示例,请参阅此单元测试...
@Himanshu,请查看动态路由选项(即路由单),它可以帮助您根据特定条件动态路由到不同的“目的地”。
查看骆驼站点中的动态路由器帮助链接;
http://camel.apache.org/dynamic-router.html
from("direct:start")
// use a bean as the dynamic router
.dynamicRouter(method(DynamicRouterTest.class, "slip"));
和内滑法;
/**
* Use this method to compute dynamic where we should route next.
*
* @param body the message body
* @return endpoints to go, or <tt>null</tt> to indicate the end
*/
public String slip(String body) {
bodies.add(body);
invoked++;
if (invoked == 1) {
return "mock:a";
} else if (invoked == 2) {
return "mock:b,mock:c";
} else if (invoked == 3) {
return "direct:foo";
} else if (invoked == 4) {
return "mock:result";
}
// no more so return null
return null;
}
希望能帮助到你...
谢谢。
一种这样的解决方案可能是:
定义路线:
private RouteDefinition buildRouteDefinition() {
RouteDefinition routeDefinition = new RouteDefinition();
routeDefinition.from(XX).to(ZZ); // define any route you want
return routeDefinition;
}
获取模型上下文并创建路由:
CamelContext context = getContext();
ModelCamelContext modelContext = context.adapt(ModelCamelContext.class);
modelContext.addRouteDefinition(routeDefinition);
还有更多获取骆驼上下文的方法。仅举几例:
exchange.getContext()
routeBuilder.getContext()