5.3. CDI 和 Camel Bean 组件


5.3.1. 按名称引用 bean

要按名称引用路由定义中的 bean,只需为 bean标上 @Named ("myNamedBean")@ApplicationScoped (或其他支持范围)。https://quarkus.io/guides/cdi-reference#supported_features@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";
    }
}
Copy to Clipboard Toggle word wrap

然后,您可以在路由定义中使用 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");
    }
}
Copy to Clipboard Toggle word wrap

作为 @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";
    }
}
Copy to Clipboard Toggle word wrap

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

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

我们的目标是支持 Camel 文档的 Bean 绑定 部分中列出的所有用例。如果某些 bean 绑定场景无法为您工作,则不要给您 提交问题

5.3.2. @consume

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

声明类,如下所示

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

  @Consume("activemq:cheese")
  public void onCheese(String name) {
    ...
  }
}
Copy to Clipboard Toggle word wrap

将自动创建以下 Camel 路由

from("activemq:cheese").bean("foo1234", "onCheese")
Copy to Clipboard Toggle word wrap

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat