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";
}
}
然后,您可以在路由定义中使用 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");
}
}
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) {
...
}
}
将自动创建以下 Camel 路由
from("activemq:cheese").bean("foo1234", "onCheese")
适用于您的.请注意,Camel Quarkus 将隐式地将 @jakarta.inject.Singleton 和 jakarta.inject.Named ("foo1234") 添加到 bean 类,其中 1234 是从完全限定类名称获取的哈希值代码。如果您的 bean 设置了一些 CDI 范围(如 @ApplicationScoped)或 @Named ("someName"),则会在自动创建的路由中遵守这些范围。