camel getRoutes返回空列表,如何实现路由控制器

时间:2014-06-26 10:10:33

标签: apache-camel

我有一个基于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.

1 个答案:

答案 0 :(得分:2)

getRoutes是CamelContext中的当前路由,表示当前正在运行的路由。使用getRouteDefinitions获取所有已定义的路由(运行和未运行),然后您可以使用它来启动路由。有一个getRouteStatus可以知道路线的状态是否正常运行。