web-dev-qa-db-ja.com

実行時にJava

Javaで実行時にラクダルートを追加するにはどうすればよいですか? Grailsの例を見つけましたが、Javaで実装しました。

私のapplicationContext.xmlにはすでにいくつかの事前定義された静的ルートがあり、実行時にいくつかの動的ルートを追加したいと思います。出来ますか?動的ルートを含める唯一の方法は、route.xmlを記述してから、ルート定義をコンテキストにロードすることです。既存の静的ルートでどのように機能しますか? 実行時のルート

11
Himanshu Yadav

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);
    }
}

完全な例については、この単体テストを参照してください。

https://svn.Apache.org/repos/asf/camel/trunk/camel-core/src/test/Java/org/Apache/camel/builder/AddRoutesAtRuntimeTest.Java

18
Ben ODay

@Himanshu、特定の条件に基づいてさまざまな「宛先」に動的にルーティングするのに役立つ可能性のあるdynamicrouteオプション(つまり、ルーティングスリップ)を確認してください。

キャメルサイトのダイナミックルーターヘルプリンクを確認してください。

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;
}

それが役に立てば幸い...

ありがとう。

1
Ramkumar S