DynamicRouter с обработкой FTP - PullRequest
       30

DynamicRouter с обработкой FTP

0 голосов
/ 22 января 2020

Я создал динамические c маршруты на основе файлов свойств через класс RouteDefinition. Контекст верблюда загружает все XML и свойства маршрутов при запуске, автозапуск (false). DynamicRouterBean (@DynamicRouter) инициализирует маршруты и запускает маршруты один за другим последовательно. Когда маршрут (процесс загрузки по FTP) завершен, маршрут должен быть остановлен, и начинается следующий маршрут (другой процесс по FTP). Все работает, как и ожидалось, за исключением случая, когда dynamicRouter останавливает текущий маршрут и начинает следующий маршрут из routeList. Все маршруты, запускаемые bean-компонентом dynamicRouter, останавливаются напрямую, а не после завершения процесса FTP, настоящий процесс FTP даже не запускается. Когда я пропускаю процесс остановки маршрута, процесс FTP работает как положено. Но когда все маршруты обработаны, а следующий маршрут для обработки равен нулю. CamelContext не выключается. Маршруты продолжают опрашивать удаленные папки.

@DynamicRouter
    public Endpoint route(String body, @ExchangeProperties Map<String, Object> properties) throws Exception{
        log.info("[DYNAMIC_ROUTER] SLIP_ENDPOINT: {}, previous RouteId: {}",
                properties.get(Exchange.SLIP_ENDPOINT), properties.get(PREVIOUS_ROUTEID));
        displayExchangeProperties(properties);
        Object previousRoute = properties.get(PREVIOUS_ROUTEID); // property will be null on first call
        Endpoint nextEndPoint = null;
        String nextRouteId = getNextRouteId();
        log.debug("[DYNAMIC_ROUTER] Next Route to process {} ",nextRouteId);
        if(nextRouteId != null) {
            properties.put(PREVIOUS_ROUTEID, nextRouteId);
            nextEndPoint = camelContext.getRoute(nextRouteId).getEndpoint();
            startRoute(nextRouteId);
        }
        else{
            endTransferProcess();
        }
        return nextEndPoint;
    }
    ...
private static RouteDefinition downloadRoute(FtpConnection ftpCon, Processor routeDispatcher){
        Predicate isCompleted = exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(Boolean.TRUE);
        log.debug("[ROUTE DEFINITION] Download route");
        RouteDefinition rd = new RouteDefinition();
        rd.from(ftpCon.getConnectionEndPoint()+"&allowNullBody=true")
                .noAutoStartup()
                .routeId(ftpCon.getRouteName())
                .choice()
                .when()
                .simple("${in.body} != null")
                    .log("[DOWNLOAD]====Download File ${file:name} ====")
                    .to(getDownloadDefinition())
                .end()
                .onCompletion()
                    .onWhen(isCompleted)
                    .log("[DOWNLOAD]==== Route level Download completed! ====")
                .end()
        ;
        return rd;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...