你可以在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);
}
}
请参阅此单元测试以获取完整示例…
/ ** *根据一个或多个许可给Apache软件基金会(ASF) *贡献者许可协议。请参阅随发布的NOTICE文件 *此项工作提供有关版权所有权的更多信息。 * ASF在Apache许可证2.0版下将此文件许可给您 *(“许可证”);除非遵守以下规定,否则您不得使用此文件 *许可证。您可以在以下位置获得许可的副本: * * http://www.apache.org/licenses/LICENSE-2.0 * *除非适用法律要求或书面同意,否则软件 *根据许可协议分发的内容是按“原样”分发的, *不作任何明示或暗示的保证或条件。 *有关特定语言的管理权限,请参阅许可证 *许可中的限制。 * /
包org.apache.camel.builder;
导入org.apache.camel.CamelContext; 导入org.apache.camel.ContextTestSupport;
/ ** *测试如何使用RouteBuilder在运行时添加路由 * * @版本 * /
public class AddRoutesAtRuntimeTest extends ContextTestSupport {
public void testAddRoutesAtRuntime() throws Exception {
getMockEndpoint("mock:start").expectedMessageCount(1);
template.sendBody("direct:start", "Hello World");
assertMockEndpointsSatisfied();
assertEquals(1, context.getRoutes().size());
getMockEndpoint("mock:foo").expectedMessageCount(1);
context.addRoutes(new MyDynamcRouteBuilder(context, "direct:foo", "mock:foo"));
template.sendBody("direct:foo", "Bye Camel");
assertMockEndpointsSatisfied();
assertEquals(2, context.getRoutes().size());
getMockEndpoint("mock:bar").expectedMessageCount(1);
context.addRoutes(new MyDynamcRouteBuilder(context, "direct:bar", "mock:bar"));
template.sendBody("direct:bar", "Hi Camel");
assertMockEndpointsSatisfied();
assertEquals(3, context.getRoutes().size());
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
// here is an existing route
from("direct:start").to("mock:start");
}
};
}
/** * This route builder is a skeleton to add new routes at runtime */
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);
}
}
}