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、特定の条件に基づいてさまざまな「宛先」に動的にルーティングするのに役立つ可能性のある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;
}
それが役に立てば幸い...
ありがとう。