您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Java中运行时添加camel路由

在Java中运行时添加camel路由

你可以在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);
     }
 }
}
java 2022/1/1 18:24:32 有385人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶