Добавить верблюжий маршрут во время выполнения, используя конечные точки, настроенные в файле свойств - PullRequest
0 голосов
/ 02 декабря 2018

Я являюсь владельцем весеннего приложения и хочу динамически добавлять верблюжьи маршруты во время запуска моего приложения. Конечные точки настраиваются в файле свойств и загружаются во время выполнения.Используя Java DSL, я использую цикл for для создания всех маршрутов,

for(int i=0;i<allEndPoints;i++)
  {
  DynamcRouteBuilder route = new 
   DynamcRouteBuilder(context,fromUri,toUri) 
camelContext.addRoutes(route)

}
private class DynamcRouteBuilder extends RouteBuilder {
    private final String from;
    private final String to;

    private MyDynamcRouteBuilder(CamelContext context, String from, String to) {
        super(context);
        this.from = from;
        this.to = to;
    }

    @Override
    public void configure() throws Exception {
        from(from).to(to);
    }
}

, но получаю исключение ниже при создании самого первого маршрута

Не удалось создать маршрут file_routedirect: at: >>> OnException[[class org.apache.camel.component.file.GenericFileOperationFailedException] -> [Журнал [Исключение захвачено $ {exception.class}], процесс [Процессор @ 0x0]]] <<< в маршруте: Маршрут (file_routedirect:) [[Из [direct: ... потому что ref должен быть указан для: process [Процессор @ 0x0] \ n \ ta </p>

Не уверен насчет этого - в чем проблема?Может у кого-то есть какие-то предложения или исправления для этого.Спасибо

1 Ответ

0 голосов
/ 04 декабря 2018

Что ж, для создания маршрутов в итерации хорошо иметь некоторый объект , который содержит различные значения для одного маршрута .Давайте назовем это RouteConfiguration, простой POJO с полями String для from, to и routeId.

Мы используем YAML-файлы для настройки таких вещей, потому что у вас есть формат реального списка вместо использования «плоских списков» в файлах свойств (route[0].from, route[0].to).

Если вы используете Spring , вы можете напрямую преобразовать такой «список конфигураций объектов» в коллекцию объектов, используя @ConfigurationProperties

Когда вы сможете создать такойКоллекция объектов значения, вы можете просто перебрать ее.Вот сильно упрощенный пример.

@Override
public void configure() {
    createConfiguredRoutes();
}

void createConfiguredRoutes() {
    configuration.getRoutes().forEach(this::addRouteToContext);
}

// Implement route that is added in an iteration
private void addRouteToContext(final RouteConfiguration routeConfiguration) throws Exception {
    this.camelContext.addRoutes(new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from(routeConfiguration.getFrom())
                .routeId(routeConfiguration.getRouteId())
                ...
                .to(routeConfiguration.getTo());
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...