camel-cdi как не запускать автоматически CamelContext и не обнаруживать автоматически RouteBuilder

В предыдущих проектах я часто использовал Guice также в сочетании с верблюдом. Мой подход состоял в том, чтобы расширить Основной класс Camel и ввести туда мой предварительно сконфигурированный контекст. Мне нужно было контролировать запуск контекста. Перед началом контекста я сделал некоторые подготовительные работы (например, запустил hawtio и другие настройки).

То же самое я сделал с RouteBuilder. Один центральный RouteBuilder настроил такие вещи, как onException, добавил RoutePolicies и настроил автозапуск на других маршрутах и, конечно же, добавил все остальные маршруты.

В то же время я научился любить CDI и поддержку CDI верблюда в 2.17 (и предохранитель 6.3), кажется, завершена.

  • Итак, что было бы хорошим подходом с Camel-CDI для управления запуском верблюжьего контекста (развернутого как пакет osgi на fuse)?

  • Как отключить или управлять автообнаружением RouteBuilder (и других вещей)?

1 ответ

Решение

Итак, что было бы хорошим подходом с Camel-CDI для управления запуском верблюжьего контекста (развернутого как пакет osgi на fuse)?

Camel CDI всегда запускает автоматически настроенные контексты Camel. При этом можно настроить их так, чтобы маршруты не запускались, объявив PostConstruct событие жизненного цикла, например:

@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {

    @PostConstruct
    void customize() {
        setAutoStartup(false);
    }
}

В этом примере маршруты, добавленные в этот контекст Camel, не будут запускаться вместе с контекстом.

Это уважает принцип Camel, чтобы начать контексты со всей проверкой, сделанной на этом этапе. Все же с возможностью не начинать маршрутизацию.

Как отключить или управлять автообнаружением RouteBuilder (и других вещей)?

RoutesBuilder бобы квалифицированы с @ContextName автоматически добавляются в соответствующие CamelContext бобы от Camel CDI. Если нет такого CamelContext Бин существует, он создается автоматически. С другой стороны, RoutesBuilder bean-компоненты, определенные с помощью пользовательских определителей, не запускают автоматическое создание каких-либо CamelContext фасоль. Это может использоваться для маршрутов Camel, которые могут потребоваться добавить позже во время выполнения приложения. Например с:

@DoNotDiscover
class MyRouteBuilder extends RouteBuilder {
    // ...
}

Если ни один компонент контекста Camel не соответствует @DoNotDiscover явно объявлено, MyRouteBuilder боб не будет автоматически обнаружен. Тем не менее, он может быть использован позже во время выполнения приложения, например:

@Inject
@DoNotDiscover
Instance<RouteBuilder> routes;

@Inject
CamelContext context;

for (RouteBuilder route : routes)
    route.addRoutes(route);
Другие вопросы по тегам