搜索

第 5 章 Camel Quarkus 中的上下文和依赖注入(CDI)

download PDF

CDI 在 Quarkus 中扮演了一个中央角色,而 Camel Quarkus 也为它提供了第一类支持。

您可以使用 @Inject@ConfigProperty 和类似注解(例如,将 bean 和配置值注入 Camel RouteBuilder ),例如:

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.apache.camel.builder.RouteBuilder;
import org.eclipse.microprofile.config.inject.ConfigProperty;

@ApplicationScoped 1
public class TimerRoute extends RouteBuilder {

    @ConfigProperty(name = "timer.period", defaultValue = "1000") 2
    String period;

    @Inject
    Counter counter;

    @Override
    public void configure() throws Exception {
        fromF("timer:foo?period=%s", period)
                .setBody(exchange -> "Incremented the counter: " + counter.increment())
                .to("log:cdi-example?showExchangePattern=false&showBodyType=false");
    }
}
1
@ApplicationScoped 注释需要 @Inject@ConfigProperty,才能在 RouteBuilder 中工作。请注意,@ApplicationScoped Bean 由 CDI 容器管理,其生命周期比其中一个纯文本 RouteBuilder 更复杂。换句话说,在 RouteBuilder 中使用 @ApplicationScoped 会有一些引导时间损失,因此,您应该仅在需要时为 RouteBuilder 标注。
2
timer.period 属性的值在 example 项目的 src/main/resources/application.properties 中定义。
提示

如需了解更多详细信息,请参阅 Quarkus Dependency Injection 指南

5.1. 访问 CamelContext

要访问 CamelContext,只需将其注入您的 bean:

import jakarta.inject.Inject;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.stream.Collectors;
import java.util.List;
import org.apache.camel.CamelContext;

@ApplicationScoped
public class MyBean {

    @Inject
    CamelContext context;

    public List<String> listRouteIds() {
        return context.getRoutes().stream().map(Route::getId).sorted().collect(Collectors.toList());
    }
}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.