60.5. 多个 Camel 上下文


如上所述,应用程序中可以声明任意数量的 CamelContext Bean。在这种情况下,这些 CamelContext Bean 上声明的 CDI 限定符用于将 Camel 路由和其他 Camel 原语绑定到对应的 Camel 上下文。例如,如果声明了以下 beans:

@ApplicationScoped
@ContextName("foo")
class FooCamelContext extends DefaultCamelContext {
}

@ApplicationScoped
@BarContextQualifier
class BarCamelContext extends DefaultCamelContext {
}

@ContextName("foo")
class RouteAddedToFooCamelContext extends RouteBuilder {

    @Override
    public void configure() {
        // ...
    }
}

@BarContextQualifier
class RouteAddedToBarCamelContext extends RouteBuilder {

    @Override
    public void configure() {
        // ...
    }
}

@ContextName("baz")
class RouteAddedToBazCamelContext extends RouteBuilder {

    @Override
    public void configure() {
        // ...
    }
}

@MyOtherQualifier
class RouteNotAddedToAnyCamelContext extends RouteBuilder {

    @Override
    public void configure() {
        // ...
    }
}

带有 @ContextName 限定的 RoutesBuilder Bean 由 Camel CDI 自动添加到相应的 CamelContext Bean 中。如果没有这样的 CamelContext bean,它会被自动创建,如 RouteAddedToBazCamelContext bean。请注意,这只适用于 Camel CDI 提供的 @ContextName 限定符。因此,RouteNotAddedToAnyCamelContext bean 符合用户定义的 @MyOtherQualifier 限定符不会添加到任何 Camel 上下文。这可能很有用,例如,对于 Camel 路由,可能需要在应用程序执行期间添加这些路由。

注意

自 Camel 2.17.0 开始,Camel CDI 能够管理任何类型的 CamelContext Bean (例如,DefaultCamelContext)。在以前的版本中,它只能管理类型为 CdiCamelContext 的 Bean,因此需要它进行扩展。

CamelContext Bean 上声明的 CDI 限定符也用于绑定相应的 Camel 原语,例如:

@Inject
@ContextName("foo")
@Uri("direct:inbound")
ProducerTemplate producerTemplate;

@Inject
@ContextName("foo")
@Uri("direct:inbound")
FluentProducerTemplate fluentProducerTemplate;

@Inject
@BarContextQualifier
MockEndpoint outbound; // URI defaults to the member name, i.e. mock:outbound

@Inject
@ContextName("baz")
@Uri("direct:inbound")
Endpoint endpoint;
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.