Динамически генерировать несколько из () Apache Camel RouteBuilder - PullRequest
0 голосов
/ 18 октября 2019

Я использовал Camel-Core 2.24.1 и смог сделать следующее:

from( sources.toArray(new String[0]) )

где sources - список URI, которые я получаю из настроек конфигурации. Я пытаюсь обновить код для использования Camel 3 (camel-core 3.0.0-RC2), но упомянутый выше метод был удален, и я не могу найти другой способ сделать то же самое.

В основном мне нужночто-то вроде:

from( String uri : sources )
{
   // add the uri as from(uri) before continuing with the route
}

Если это поможет лучше понять, окончательный маршрут должен выглядеть следующим образом:

      from( sources.toArray(new String[0]) )
      .routeId(Constants.ROUTE_ID)
      .split().method(WorkRequestSplitter.class, "splitMessage")
        .id(Constants.WORK_REQUEST_SPLITTER_ID)
      .split().method(RequestSplitter.class, "splitMessage")
        .id(Constants.REQUEST_SPLITTER_ID)
      .choice()
        .when(useReqProc)
          .log(LoggingLevel.INFO, "Found the request processor using it")
          .to("bean:" + reqName)
        .endChoice()
        .otherwise()
          .log(LoggingLevel.ERROR, "requestProcessor not found, stopping route")
          .stop()
        .endChoice()
      .end()
      .log("Sending the request the URI")
      .recipientList(header(Constants.HDR_ARES_URI))
      .choice()
        .when(useResProc)
          .log(LoggingLevel.INFO, "Found the results processor using it")
          .to("bean:" + resName)
        .endChoice()
        .otherwise()
          .log(LoggingLevel.INFO, "resultProcessor not found, sending 'as is'")
        .endChoice()
      .end()
      .log("Sending the request to all listeners")
      .to( this.destinations.toArray( new String[0] ) );

Любая помощь будет принята с благодарностью.

1 Ответ

4 голосов
/ 18 октября 2019

Эта функция была удалена без прямой замены в CAMEL-6589 .

См. Руководство по миграции :

В Camel 2.x вы можете иметь 2 или более входных данных для маршрутов Camel, однако это не поддерживается во всех сценариях использования в Camel, и эта функция используется редко. Это также устарело в Camel 2.x. В Camel 3 мы удалили оставшийся код для указания нескольких входов для маршрутов, и теперь теперь можно указать только один вход для маршрута.

Вы всегда можете разделить определение маршрута на логические блокис Прямая конечная точка . Это также может быть сгенерировано динамически с for-each.

for(String uri : sources){
    from(uri).to("direct:commonProcess");
}

from("direct:commonProcess")
    .routeId(Constants.ROUTE_ID)
    //...
    .log("Sending the request to all listeners")
    .to(this.destinations.toArray(new String[0]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...