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);