第 4 章 配置
Camel Quarkus 自动配置和部署 Camel 上下文 bean,默认情况下根据 Quarkus 应用程序生命周期启动/停止。配置步骤在构建过程中发生在 Quarkus 的扩展阶段,它由 Camel Quarkus 扩展驱动,这些扩展可以使用 Camel Quarkus 特定 quarkus.camel.* 属性进行调优。
Quarkus .camel.* 配置属性记录在单独的扩展页中 - 例如,请参阅 Camel Quarkus Core。
完成配置后,会将最小的 Camel 运行时编译并在 RUNTIME_INIT 阶段启动。
4.1. 配置 Camel 组件 复制链接链接已复制到粘贴板!
4.1.1. application.properties 复制链接链接已复制到粘贴板!
要通过属性配置 Apache Camel 的组件和其他方面,请确保应用程序直接或传输取决于 camel-quarkus-core。由于大多数 Camel Quarkus 扩展依赖于 camel-quarkus-core,因此您通常不需要显式添加它。
Camel -quarkus-core 将 Camel Main 的功能带到 Camel Quarkus。
在以下示例中,您可以通过 application.properties 在 LogComponent 上设置特定的 ExchangeFormatter 配置:
camel.component.log.exchange-formatter = #class:org.apache.camel.support.processor.DefaultExchangeFormatter
camel.component.log.exchange-formatter.show-exchange-pattern = false
camel.component.log.exchange-formatter.show-body-type = false
4.1.2. CDI 复制链接链接已复制到粘贴板!
您还可以以编程方式使用 CDI 配置组件。
推荐的方法是观察 component AddEvent,并在路由和 CamelContext 启动前配置组件:
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import org.apache.camel.quarkus.core.events.ComponentAddEvent;
import org.apache.camel.component.log.LogComponent;
import org.apache.camel.support.processor.DefaultExchangeFormatter;
@ApplicationScoped
public static class EventHandler {
public void onComponentAdd(@Observes ComponentAddEvent event) {
if (event.getComponent() instanceof LogComponent) {
/* Perform some custom configuration of the component */
LogComponent logComponent = ((LogComponent) event.getComponent());
DefaultExchangeFormatter formatter = new DefaultExchangeFormatter();
formatter.setShowExchangePattern(false);
formatter.setShowBodyType(false);
logComponent.setExchangeFormatter(formatter);
}
}
}
4.1.2.1. 生成 @Named 组件实例 复制链接链接已复制到粘贴板!
或者,您可以在 @Named producer 方法中自行创建和配置组件。这就像 Camel 使用组件 URI 方案从其 registry 中查找组件。例如,如果 LogComponent Camel 会查找名为 bean 的日志。
请注意,尽管生成 @Named 组件通常将可以正常工作,但可能导致出现一些组件的问题。
Camel Quarkus 扩展可执行以下操作的一个或多个功能:
- 传递默认 Camel 组件类型的自定义子类型。请参阅 Vert.x WebSocket 扩展 示例。
- 对组件执行一些 Quarkus 特定的自定义。请参阅 JPA 扩展 示例。
因此,您在生成自己的组件实例时不会执行这些操作,因此建议在观察器方法中配置组件。
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.apache.camel.component.log.LogComponent;
import org.apache.camel.support.processor.DefaultExchangeFormatter;
@ApplicationScoped
public class Configurations {
/**
* Produces a {@link LogComponent} instance with a custom exchange formatter set-up.
*/
@Named("log")
LogComponent log() {
DefaultExchangeFormatter formatter = new DefaultExchangeFormatter();
formatter.setShowExchangePattern(false);
formatter.setShowBodyType(false);
LogComponent component = new LogComponent();
component.setExchangeFormatter(formatter);
return component;
}
}
- 1
- 如果方法的名称相同,则可以省略
@Named注释的"log"参数。