60.9. Camel 事件到 CDI 事件
从 Camel 2.17 开始提供
Camel 提供了一组 管理事件,可用于侦听 Camel 上下文、服务、路由和交换事件。Camel CDI 将这些 Camel 事件无缝转换为 CDI 事件,这些事件可使用 CDI 观察器方法观察,例如:
void onContextStarting(@Observes CamelContextStartingEvent event) {
// Called before the default Camel context is about to start
}
void onContextStarting(@Observes CamelContextStartingEvent event) {
// Called before the default Camel context is about to start
}
自 Camel 2.18 起,可以观察特定路由的事件(RouteAddedEvent、RouteStartedEvent、RouteStoppedEvent 和 RouteRemovedEvent)应该明确定义,例如:
from("...").routeId("foo").to("...");
void onRouteStarted(@Observes @Named("foo") RouteStartedEvent event) {
// Called after the route "foo" has started
}
from("...").routeId("foo").to("...");
void onRouteStarted(@Observes @Named("foo") RouteStartedEvent event) {
// Called after the route "foo" has started
}
当 CDI 容器中存在多个 Camel 上下文时,Camel 上下文 bean 限定符(如 @ContextName )可用于优化观察器方法解析到在 观察器解析 中指定的特定 Camel 上下文,例如:
同样,@Default qualifier 可以用来观察 默认 Camel 上下文的 Camel 事件(如果存在多个上下文,例如:
void onExchangeCompleted(@Observes @Default ExchangeCompletedEvent event) {
// Called after the exchange 'event.getExchange()' processing has completed
}
void onExchangeCompleted(@Observes @Default ExchangeCompletedEvent event) {
// Called after the exchange 'event.getExchange()' processing has completed
}
在这个示例中,如果没有指定限定符,则隐式假定 @Any qualifier,以便接收所有 Camel 上下文的对应事件。
请注意,只有在部署中检测到 Camel 事件侦听 Camel 事件以及每个 Camel 上下文时,才会激活 Camel 事件转换为 CDI 事件的支持。