在之前的项目中,我经常使用Guice和骆驼一起使用。我的方法是扩展Camel的Main类并在那里注入我预先配置的上下文。 我需要控制上下文的开始。在开始上下文之前,我做了一些准备工作(例如,启动hawtio和其他设置)。
我和RouteBuilder一样。一个中央RouteBuilder设置像onException,添加RoutePolicies和在其他路由上配置自动启动,当然还添加了所有其他路由。
与此同时,我学会了爱CDI,并且2.17(和保险丝6.3)中的CDI支持似乎已经完成。
那么用camel-cdi来控制驼峰上下文的开始(在保险丝上部署为osgi bundle)会有什么好方法?
如何禁用或控制RouteBuilder(和/或其他东西)的自动发现?
答案 0 :(得分:2)
那么用camel-cdi控制开始是一个很好的方法 骆驼上下文(在保险丝上部署为osgi bundle)?
Camel CDI始终启动自动配置的Camel上下文。话虽如此,通过声明PostConstruct
生命周期事件,可以自定义这些路径,以便不启动路由:
@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {
@PostConstruct
void customize() {
setAutoStartup(false);
}
}
在该示例中,添加到Camel上下文的路由不会与上下文一起启动。
这尊重Camel原则,以启动具有在该阶段完成的所有验证的上下文。但是有能力不开始路由。
如何禁用或控制RouteBuilder(和/或其他)的自动发现 的东西)?
使用RoutesBuilder
限定的@ContextName
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);