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、特定の条件に基づいてさまざまな「宛先」に動的にルーティングするのに役立つ可能性のある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つは次のとおりです。
ルートを定義します。
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()