Apache Camel путь к последовательному процессу - PullRequest
0 голосов
/ 21 октября 2019

У меня есть два маршрута:

1 - прочитать из очереди и создать resultObject

2 - дождаться, пока в папке будет создан определенный файл, и затем изменить resultObject из маршрута 1. Результат будет отправлен в очередь.

Как лучше объединить эти два маршрута?

На данный момент у меня есть:

public class FirstRouteBuilder extends RouteBuilder {

    @Override
    public void configure() {
        from(myqueue)
            .process(exchange -> {
                // prepare ResultObject
                // add to camel context the second route that is initializated with resultObject
                SecondRouteBuilder secondRouteBuilder = new SecondRouteBuilder(resultObject);
                camelCtx.addRoutes(secondRouteBuilder);
                camelCtx.start();
            });
    }
}
public class SecondRouteBuilder extends RouteBuilder {

    public SecondRouteBuilder (ResultObject result){
        this.resultObject = result;
    }

    @Override
    public void configure() {
        from(waitingAFileFromDirectory)
            .process(exchange -> {
                // process the file using the resultObject
            })
            .to(resultQueue);
    }
}

1 Ответ

0 голосов
/ 21 октября 2019

Объедините их с помощью pollEnrich и loopDoWhile

  • pollEnrich, чтобы получить файл
  • loopDoWhile для управления файломполучить поведение
public class CombineRouteBuilder extends RouteBuilder {

    @Override
    public void configure() {
        from(myqueue)
            .process(exchange -> {
                // prepare ResultObject and save to exchange property
            })
            .loopDoWhile(simple(<boolean gate to control file obtain strategy>))
                .pollEnrich(AFileFromDirectory)    // get your file
                // maybe a process to control boolean gate of loopDoWhile
            .end() // end loop
            .process(exchange -> {
                // process the file using the resultObject from exchange property
            })
            .to(resultQueue);
    }
}
...