camel-cdi 如何不自动启动 CamelContext 并且不自动发现 RouteBuilder
camel-cdi how to not auto start CamelContext and not auto discover RouteBuilder
在以前的项目中,我经常将 Guice 与 camel 结合使用。我的方法是扩展 Camel 的 Main class 并在那里注入我的预配置上下文。
我需要控制上下文的开始。在上下文开始之前我做了一些准备工作(例如启动 hawtio 和其他设置)。
与我对 RouteBuilder 所做的相同。一个中央 RouteBuilder 设置了诸如 onException 之类的东西,添加了 RoutePolicies 并在其他路由上配置了自动启动,当然还添加了所有其他路由。
与此同时,我学会了爱上 CDI,camel 在 2.17(和 fuse 6.3)中的 CDI 支持似乎已经完成。
那么用 camel-cdi 控制 camel 上下文启动的好方法是什么(在保险丝上部署为 osgi 包)?
如何禁用或控制 RouteBuilder(和/或其他东西)的自动发现?
So what would be a good approach with camel-cdi to control the start
of camel context (deployed as osgi bundle on fuse)?
Camel CDI 始终启动自动配置的 Camel 上下文。也就是说,可以通过声明 PostConstruct
生命周期事件来自定义这些路由,例如:
@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {
@PostConstruct
void customize() {
setAutoStartup(false);
}
}
在该示例中,添加到该 Camel 上下文的路由不会随上下文一起启动。
这尊重 Camel 原则,即使用在该阶段完成的所有验证来启动上下文。然而具有不启动路由的能力。
How to disable or control autodiscovery of RouteBuilder (and or other
stuff)?
用@ContextName
限定的RoutesBuilder
个bean被Camel CDI自动添加到相应的CamelContext
个bean中。如果不存在这样的 CamelContext
bean,它会自动创建。另一方面,使用用户定义的限定符限定的 RoutesBuilder
bean 不会触发任何 CamelContext
bean 的自动创建。这可用于稍后在应用程序执行期间可能需要添加的 Camel 路由。例如:
@DoNotDiscover
class MyRouteBuilder extends RouteBuilder {
// ...
}
如果没有明确声明使用 @DoNotDiscover
限定的 Camel 上下文 bean,则不会自动发现 MyRouteBuilder
bean。它仍然可以稍后在应用程序执行期间使用,例如:
@Inject
@DoNotDiscover
Instance<RouteBuilder> routes;
@Inject
CamelContext context;
for (RouteBuilder route : routes)
route.addRoutes(route);
在以前的项目中,我经常将 Guice 与 camel 结合使用。我的方法是扩展 Camel 的 Main class 并在那里注入我的预配置上下文。 我需要控制上下文的开始。在上下文开始之前我做了一些准备工作(例如启动 hawtio 和其他设置)。
与我对 RouteBuilder 所做的相同。一个中央 RouteBuilder 设置了诸如 onException 之类的东西,添加了 RoutePolicies 并在其他路由上配置了自动启动,当然还添加了所有其他路由。
与此同时,我学会了爱上 CDI,camel 在 2.17(和 fuse 6.3)中的 CDI 支持似乎已经完成。
那么用 camel-cdi 控制 camel 上下文启动的好方法是什么(在保险丝上部署为 osgi 包)?
如何禁用或控制 RouteBuilder(和/或其他东西)的自动发现?
So what would be a good approach with camel-cdi to control the start of camel context (deployed as osgi bundle on fuse)?
Camel CDI 始终启动自动配置的 Camel 上下文。也就是说,可以通过声明 PostConstruct
生命周期事件来自定义这些路由,例如:
@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {
@PostConstruct
void customize() {
setAutoStartup(false);
}
}
在该示例中,添加到该 Camel 上下文的路由不会随上下文一起启动。
这尊重 Camel 原则,即使用在该阶段完成的所有验证来启动上下文。然而具有不启动路由的能力。
How to disable or control autodiscovery of RouteBuilder (and or other stuff)?
用@ContextName
限定的RoutesBuilder
个bean被Camel CDI自动添加到相应的CamelContext
个bean中。如果不存在这样的 CamelContext
bean,它会自动创建。另一方面,使用用户定义的限定符限定的 RoutesBuilder
bean 不会触发任何 CamelContext
bean 的自动创建。这可用于稍后在应用程序执行期间可能需要添加的 Camel 路由。例如:
@DoNotDiscover
class MyRouteBuilder extends RouteBuilder {
// ...
}
如果没有明确声明使用 @DoNotDiscover
限定的 Camel 上下文 bean,则不会自动发现 MyRouteBuilder
bean。它仍然可以稍后在应用程序执行期间使用,例如:
@Inject
@DoNotDiscover
Instance<RouteBuilder> routes;
@Inject
CamelContext context;
for (RouteBuilder route : routes)
route.addRoutes(route);