如何在骆驼上下文中找到所有路线

问题描述 投票:-1回答:2

我正在尝试查找与骆驼环境相关的所有路线?我找不到骆驼交换getContext()数据表,所以我知道可以调用什么方法?

我有一个动态的路由生成器,删除一个配置文件,然后创建路由。我需要在注册表中创建未启动的路由,并使用JGroups / Controlbus路由来控制谁是活动路由。但是我不知道如何获取与骆驼上下文关联的所有路线?如果您能对此有所了解,我真的会在您的部门。预先感谢。

这是我所拥有的,但是我无法工作,在stacktrace上找到。

@Override
public void process(Exchange exchange) throws Exception {

    List<ProcessorDefinition<?>> outputProcessorDefs = exchange.getContext().getRouteDefinition("[routeId]").getOutputs();
    for ( ProcessorDefinition rte : outputProcessorDefs ) {

    log.info("ROUTES: " + rte);

    }

}
java routes apache-camel
2个回答
0
投票

感谢克劳斯How to find all Endpoints of route (Apache Camel, Java)回答的问题

我能够找到一些信息,并找到了另一种简单的方法。

public void process(Exchange exchange) throws Exception {

    List<Route> routeList = exchange.getContext().getRoutes();
    for ( Route rte : routeList ) {

    log.info("ROUTES: " + rte.getId());

    }

0
投票

这是我通过getRoutes()实现JGroups ControlBus管理的动态路由创建测试。

public class EndpointControlBusFileRouteBuilder extends RouteBuilder {

    private static final Logger log = LoggerFactory.getLogger(EndpointControlBusFileRouteBuilder.class);

    private String routeId;
    private String ClusterId;

    public EndpointControlBusFileRouteBuilder(String routeId) {

        this.routeId = routeId;

    }

    @Override
    public void configure() throws Exception {

        log.info("*** JGroups routeCluster - RouteId : " + routeId + " ***");
        ClusterId = routeId + ".JGroups";

        from("jgroups:" + ClusterId + "?enableViewMessages=true&channelProperties=etc/jgroups.xml")
        .autoStartup(true)
        .routeId(ClusterId)
        .filter(dropNonCoordinatorViews())
        .threads().delay(delayIfContextNotStarted(SECONDS.toMillis(5))) // run in separated and delayed thread. Delay only if the context hasn't been started already. 
        .log("Starting JGroups JChannel Routes Consumer!!!!!!!!!!!!!!!!!!!!!")
        .to("controlbus:route?routeId=" + routeId + "&action=start&async=true");

    }

}

public class EndpointControlBusProcessor implements Processor {

    private String routeId = "";

    private static final Logger log = LoggerFactory.getLogger(EndpointControlBusProcessor.class);

    @Override
    public void process(Exchange exchange) throws Exception {

        List<Route> routeList = exchange.getContext().getRoutes();
        ProducerTemplate template = exchange.getContext().createProducerTemplate();

        for ( Route rte : routeList ) {

            routeId = rte.getId();

//          log.info("ROUTES: " + routeId);
//          ServiceStatus routeStatus = exchange.getContext().getRouteStatus(routeId);
//          log.info("Route " + routeId + " Status: " + routeStatus);

            String status = template.requestBody("controlbus:route?routeId=" + routeId + "&action=status", null, String.class);
            log.info("Controlbus Route Status: " + status + " for route: " + routeId);

            if ( (null == status) || status.equalsIgnoreCase("Stopped") ) {

                exchange.getContext().addRoutes(new EndpointControlBusFileRouteBuilder(routeId));
//              status = template.requestBody("controlbus:route?routeId=" + routeId + "&action=status", null, String.class);
//              log.info("Controlbus Route Status: " + status + " for route: " + routeId);

            } else {

                log.info("Route " + routeId + " already started");

            }
        }
        template.stop();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.