6.3. CDI 和 Camel Bean 组件


6.3.1. 按名称引用 bean

要按名称引用路由定义中的 bean,只需为 bean 标注 @Named ("myNamedBean")@ApplicationScoped (或其他 支持的范围 )。@RegisterForReflection 注释对原生模式非常重要。

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Named;
import io.quarkus.runtime.annotations.RegisterForReflection;

@ApplicationScoped
@Named("myNamedBean")
@RegisterForReflection
public class NamedBean {
    public String hello(String name) {
        return "Hello " + name + " from the NamedBean";
    }
}

然后您可以在路由定义中使用 myNamedBean 名称:

import org.apache.camel.builder.RouteBuilder;
public class CamelRoute extends RouteBuilder {
    @Override
    public void configure() {
        from("direct:named")
                .bean("myNamedBean", "hello");
        /* ... which is an equivalent of the following: */
        from("direct:named")
                .to("bean:myNamedBean?method=hello");
    }
}

作为 @Named 的替代选择,您也可以使用 io.smallrye.common.annotation.Identifier 来命名和识别 bean。

import jakarta.enterprise.context.ApplicationScoped;
import io.quarkus.runtime.annotations.RegisterForReflection;
import io.smallrye.common.annotation.Identifier;

@ApplicationScoped
@Identifier("myBeanIdentifier")
@RegisterForReflection
public class MyBean {
    public String hello(String name) {
        return "Hello " + name + " from MyBean";
    }
}

然后引用 Camel 路由中的标识符值:

import org.apache.camel.builder.RouteBuilder;
public class CamelRoute extends RouteBuilder {
    @Override
    public void configure() {
        from("direct:start")
                .bean("myBeanIdentifier", "Camel");
    }
}
注意

我们的目标是支持 Camel 文档的 Bean 绑定 部分中列出的所有用例。如果某些 bean 绑定场景不适用于您,请不要记住 问题

6.3.2. @consume

自 Camel Quarkus 2.0.0 起,camel-quarkus-bean 工件提供对 @org.apache.camel.Consume - 的支持,请参阅 Camel 文档的 Pojo 消耗 部分。

声明类,如下所示

import org.apache.camel.Consume;
public class Foo {

  @Consume("activemq:cheese")
  public void onCheese(String name) {
    ...
  }
}

将自动创建以下 Camel 路由

from("activemq:cheese").bean("foo1234", "onCheese")

为您提供.请注意,Camel Quarkus 将隐式将 @jakarta.inject.Singletonjakarta.inject.Named ("foo1234") 添加到 bean 类,其中 1234 是一个从完全限定类名称获取的哈希值代码。如果您的 bean 设置了一些 CDI 范围(如 @ApplicationScoped)或 @Named ("someName"),则这些范围将在自动创建的路由中进行。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部