我有一个基于java的骆驼应用程序(使用guice)。我想将所有路由的开始/停止分成“RouteControl”类(没有路由应该知道这个中央控制)。 目前所有配置的路由都是autostart = false,RouteControl注入CamelContext并执行此操作:
/**
* Starts all routes found in context.
*/
public void startAll() {
log.info("starting all routes.");
for (Route route : context.getRoutes()) {
String id = route.getId();
try {
log.info("starting route " + id);
context.startRoute(id);
} catch (Exception e) {
throw new IllegalStateException("Unable to start route " + id + " cause, ", e);
}
}
}
但是这不起作用:如果我在main.run()之后调用它(它没有被调用,因为run不返回)但是如果我在main.run之前调用它,则context.getRoutes()返回一个空列表。但是日志说Total 2 routes, of which 0 is started.
所以出了问题,还是有更好的方法来实现这样的中央路径控制?
更新(克劳斯的答案无效):
现在我的代码看起来像这样:
/**
* Starts all routes found in context.
*/
public void startAll() {
log.info("starting all routes.");
for (RouteDefinition route : ((ModelCamelContext) context).getRouteDefinitions()) {
String id = route.getId();
try {
log.info("starting route " + id);
context.startRoute(id);
} catch (Exception e) {
throw new IllegalStateException("Unable to start route " + id + " cause, ", e);
}
}
}
循环现在正确 - 我在每条路线前看到“起始路线”,但最后日志显示:DefaultCamelContext INFO Total 2 routes, of which 0 is started.
答案 0 :(得分:2)
getRoutes
是CamelContext中的当前路由,表示当前正在运行的路由。使用getRouteDefinitions
获取所有已定义的路由(运行和未运行),然后您可以使用它来启动路由。有一个getRouteStatus
可以知道路线的状态是否正常运行。