Camel Spring Boot 3.18 入门
Camel Spring Boot 3.18 入门
摘要
前言 复制链接链接已复制到粘贴板!
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 Camel Spring Boot 3.18 入门 复制链接链接已复制到粘贴板!
本指南介绍了 Camel Spring Boot,并演示了如何开始使用 Camel Spring Boot 构建应用程序:
1.1. Camel Spring Boot 启动器 复制链接链接已复制到粘贴板!
Camel 支持 Spring Boot 为许多 Camel 组件提供 Camel 和启动程序的 自动配置。Camel 上下文会自动探测到 Spring 上下文中的 Camel 路由的不透明自动配置,并将密钥 Camel 实用程序(如制作者模板、消费者模板和类型转换器)注册为 Bean。
有关使用 Maven archtype 为 Spring Boot 应用程序生成 Camel 的详情,请参考使用 Maven 为 Spring Boot 应用程序生成 Camel。
要开始,您必须将 Camel Spring Boot BOM 添加到 Maven pom.xml 文件中。
camel-spring-boot-bom 是一个基本 BOM,其中包含 Camel Spring Boot starter JARs 列表。
接下来,添加 Camel Spring Boot Start 来启动 Camel 上下文。
您还必须添加 Spring Boot 应用程序所需的任何组件启动程序。以下示例演示了如何将 自动配置启动程序 添加到 ActiveMQ 组件
策展的 camel-spring-boot-dependencies BOM (生成)包含 Spring Boot 和 Apache Camel 使用的调整 JAR,以避免任何冲突。此 BOM 用于测试 camel-spring-boot 本身。
Spring Boot 用户可以使用 camel-spring-boot-bom 选择使用 纯 Camel 依赖项,该依赖项只有 Camel starter JARs 作为受管依赖项。但是,如果 Spring Boot 的第三方 JAR 与特定的 Camel 组件不兼容,这可能会导致类路径冲突。
1.1.2. Spring Boot 配置支持 复制链接链接已复制到粘贴板!
每个 入门 程序列出了您可以在标准 application.properties 或 application.yml 文件中配置的配置参数。这些参数的格式为 camel.component.[component-name].[parameter]。例如,要配置您可以设置的 ActiveMQ 代理的 URL:
camel.component.activemq.broker-url=tcp://localhost:61616
camel.component.activemq.broker-url=tcp://localhost:61616
1.1.3. 添加 Camel 路由 复制链接链接已复制到粘贴板!
Camel 路由 在 Spring 应用程序上下文中检测到,例如使用 org.springframework.stereotype.Component 注解的路由会被加载,添加到 Camel 上下文并运行。
1.2. Spring Boot 复制链接链接已复制到粘贴板!
Spring Boot 可为您自动配置 Camel。Camel 上下文会自动探测到 Spring 上下文中的 Camel 路由的不透明自动配置,并将密钥 Camel 实用程序(如制作者模板、消费者模板和类型转换器)注册为 Bean。
Maven 用户需要将以下依赖项添加到其 pom.xml 中,才能使用此组件:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot</artifactId>
<version>3.18.3.redhat-00042</version> <!-- use the same version as your Camel core version -->
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot</artifactId>
<version>3.18.3.redhat-00042</version> <!-- use the same version as your Camel core version -->
</dependency>
camel-spring-boot jar 附带 spring.factories 文件,因此当您将该依赖项添加到类路径后,Spring Boot 将自动为您自动配置 Camel。
1.2.1. Camel Spring Boot Starter 复制链接链接已复制到粘贴板!
Apache Camel 提供了一个 Spring Boot Starter 模块,它允许您使用启动程序开发 Spring Boot 应用程序。源代码中也有一个 示例应用程序。
要使用启动程序,将以下内容添加到 spring boot pom.xml 文件中:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-bom</artifactId>
<version>3.18.3.redhat-00042</version> <!-- use the same version as your Camel core version -->
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-bom</artifactId>
<version>3.18.3.redhat-00042</version> <!-- use the same version as your Camel core version -->
</dependency>
然后,您只能在 Camel 路由中添加类,例如:
然后,这些路由将自动启动。
您可以在 application.properties 或 application.yml 文件中自定义 Camel 应用程序。
1.2.2. Spring Boot 自动配置 复制链接链接已复制到粘贴板!
当在 Spring Boot 中使用 spring-boot 时,请确保使用以下 Maven 依赖项来支持自动配置:
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-spring-boot-starter</artifactId> <version>3.18.3.redhat-00042</version> <!-- use the same version as your Camel core version --> </dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>3.18.3.redhat-00042</version> <!-- use the same version as your Camel core version -->
</dependency>
1.2.3. 自动配置的 Camel 上下文 复制链接链接已复制到粘贴板!
Camel 自动配置提供的最重要功能是 CamelContext 实例。Camel 自动配置为您创建一个 Spring CamelContext,并负责该上下文的正确初始化和关闭。创建的 Camel 上下文也在 Spring 应用程序上下文中注册(在 camelContext bean 名称下),以便您可以像任何其他 Spring bean 一样访问它。
1.2.4. 自动检测 Camel 路由 复制链接链接已复制到粘贴板!
Camel 自动配置从 Spring 上下文收集所有 RouteBuilder 实例,并自动将它们注入提供的 CamelContext。这意味着,使用 Spring Boot starter 创建新的 Camel 路由非常简单,就像将 @Component 注解类添加到您的 classpath 中一样简单:
或者在 @Configuration 类中创建新路由 RouteBuilder bean:
1.2.5. Camel 属性 复制链接链接已复制到粘贴板!
Spring Boot 自动配置自动连接到 Spring Boot 外部配置 (可能包含带有 Camel 属性支持的属性占位符、OS 环境变量或系统属性)。它基本上意味着 application.properties 文件中定义的任何属性:
route.from = jms:invoices
route.from = jms:invoices
或者通过系统属性设置:
java -Droute.to=jms:processed.invoices -jar mySpringApp.jar
java -Droute.to=jms:processed.invoices -jar mySpringApp.jar
可用作 Camel 路由中的占位符:
1.2.6. 自定义 Camel 上下文配置 复制链接链接已复制到粘贴板!
如果要对 Camel 自动配置创建的 CamelContext bean 执行一些操作,请在 Spring 上下文中注册 CamelContextConfiguration 实例:
在 Spring 上下文启动前才会调用 ApplicationStart 的方法,因此传递到此回调的 CamelContext 实例完全自动配置。如果您将多个 CamelContextConfiguration 实例添加到 Spring 上下文中,则会执行每个实例。
1.2.7. 自动配置的消费者和制作者模板 复制链接链接已复制到粘贴板!
Camel auto-configuration 提供预配置的 ConsumerTemplate 和 ProducerTemplate 实例。只需将它们注入到 Spring 管理的 Bean 中:
默认情况下,消费者模板和制作者模板将端点缓存大小设置为 1000。您可以通过修改以下 Spring 属性来更改这些值:
camel.springboot.consumer-template-cache-size = 100 camel.springboot.producer-template-cache-size = 200
camel.springboot.consumer-template-cache-size = 100
camel.springboot.producer-template-cache-size = 200
1.2.8. 自动配置的 TypeConverter 复制链接链接已复制到粘贴板!
Camel auto-configuration 在 Spring 上下文中注册名为 typeConverter 的 TypeConverter 实例。
1.2.8.1. Spring 类型转换 API 网桥 复制链接链接已复制到粘贴板!
Spring 附带强大的 类型转换 API。Spring API 与 Camel 类型转换器 API 类似。就像两个 API 都是相似的,Camel Spring Boot 会自动注册到 Spring 转换 API 的桥接转换器(SpringTypeConverter)。这意味着开箱即用的 Camel 将像 Camel 一样对待 Spring Converters。使用这个方法,您可以使用通过 Camel TypeConverter API 访问的 Camel 和 Spring 转换器:
在 hood Camel Spring Boot 下,将转换委派给应用程序上下文中可用的 Spring ConversionService 实例。如果没有 ConversionService 实例,Camel Spring Boot 自动配置将为您创建一个。
1.2.9. 使应用程序保持处于活动状态 复制链接链接已复制到粘贴板!
在启动时启用此功能的 Camel 应用程序,以便防止 JVM 终止使应用程序保持处于活动状态的唯一目的。这意味着,在使用 Spring Boot 启动 Camel 应用程序后,您的应用程序会等待 Ctrl+C 信号,且不会立即退出。
可以使用 camel.springboot.main-run-controller 激活控制器线程为 true。
camel.springboot.main-run-controller = true
camel.springboot.main-run-controller = true
使用 Web 模块的应用程序(例如,导入 org.springframework.boot:spring-boot-web-starter 模块的应用程序)通常不需要使用此功能,因为应用程序会存在其他非守护进程线程。
1.2.10. 添加 XML 路由 复制链接链接已复制到粘贴板!
默认情况下,您可以将 Camel XML 路由放在目录 camel 下的 classpath 中,它 camel-spring-boot 将自动探测并包含它。您可以配置目录名称,或使用配置选项关闭这个目录:
turn off
# turn off
camel.springboot.routes-include-pattern = false
scan only in the com/foo/routes classpath
# scan only in the com/foo/routes classpath
camel.springboot.routes-include-pattern = classpath:com/foo/routes/*.xml
XML 文件应该是 Camel XML 路由(而非 < CamelContext> ),例如:
1.2.11. 测试 JUnit 5 方法 复制链接链接已复制到粘贴板!
为了进行测试,Maven 用户需要将以下依赖项添加到其 pom.xml 中:
要测试 Camel Spring Boot 应用程序,请使用 @CamelSpringBootTest 注解您的测试类。这为应用程序提供了 Camel 的 Spring Test 支持,以便您可以使用 Spring Boot 测试惯例编写测试。
若要获取 CamelContext 或 ProducerTemplate,您可以使用 @Autowired 以普通 Spring 方式将它们注入类。
您还可以使用 camel-test-spring-junit5 来声明性地配置测试。本例使用 @MockEndpoints 注释自动-mock a 端点:
1.3. 组件启动器 复制链接链接已复制到粘贴板!
Camel Spring Boot 支持以下 Camel 工件作为 Spring Boot Starters:
以下列出的一些工件还不提供参考文档。当本文档可用后立即发布。
| 组件 | 工件 | 描述 |
|---|---|---|
| camel-amqp-starter | 使用 Apache QPid 客户端使用 AMQP 协议进行消息传递. | |
| camel-aws2-cw-starter | 使用 AWS SDK 版本 2.x 将指标发送到 AWS CloudWatch。 | |
| camel-aws2-ddb-starter | 使用 AWS SDK 版本 2.x 从 AWS DynamoDB 服务存储和检索数据。 | |
| camel-aws2-kinesis-starter | 使用 AWS SDK 版本 2.x 从 AWS Kinesis Streams 使用和生成记录。 | |
| camel-aws2-lambda-starter | 使用 AWS SDK 版本 2.x 管理并调用 AWS Lambda 功能。 | |
| camel-aws2-s3-starter | 使用 AWS SDK 版本 2.x 从 AWS S3 Storage Service 存储和检索对象。 | |
| camel-aws2-sns-starter | 使用 AWS SDK 版本 2.x 将信息发送到 AWS Simple Notification 主题。 | |
| camel-aws2-sqs-starter | 使用 AWS SDK 版本 2.x 向 AWS SQS 服务发送和接收信息。 | |
| camel-azure-storage-blob-starter | 使用 SDK v12 从 Azure Storage Blob Service 存储和检索 Blob。 | |
| camel-azure-storage-queue-starter | azure-storage-queue 组件用于使用 Azure SDK v12 存储和检索信息到 Azure Storage Queue。 | |
| camel-bean-starter | 调用存储在 Camel registry 中的 Java Bean 的方法。 | |
| camel-bean-validator-starter | 使用 Java Bean Validation API 验证消息正文。 | |
| camel-browse-starter | 检查在支持 BrowsableEndpoint 的端点上收到的消息。 | |
| camel-cassandraql-starter | 使用 CQL3 API (而不是 Thrift API)与 Cassandra 2.0 集成。基于 DataStax 提供的 Cassandra Java 驱动程序。 | |
| camel-controlbus-starter | 管理和监控 Camel 路由。 | |
| camel-cron-starter | 通过 Unix cron 语法指定的时间触发事件的通用接口。 | |
| camel-cxf-soap-starter | 使用 Apache CXF 公开 SOAP WebServices,或使用 CXF WS 客户端连接到外部 WebServices。 | |
| camel-dataformat-starter | 使用 Camel 数据格式作为常规 Camel 组件。 | |
| camel-dataset-starter | 提供 Camel 应用程序的负载和 soak 测试数据。 | |
| camel-direct-starter | 同步调用来自同一 Camel 上下文的另一个端点。 | |
| 链接:https://access.redhat.com/documentation/zh-cn/red_hat_integration/2023.q2/html-single/camel_spring_boot_reference_guide_3.18/index#csb-camel-elasticsearch-component-starter | camel-elasticsearch-starter | 通过 Java 客户端 API 将请求发送到 ElasticSearch。 |
| camel-fhir-starter | 使用 FHIR (Fast Healthcare Interoperability Resources)标准在电信域中交换信息。 | |
| camel-file-starter | 读取和写入文件。 | |
| camel-ftp-starter | 将文件上传到 FTP 服务器。 | |
| camel-http-starter | 使用 Apache HTTP 客户端 4.x 向外部 HTTP 服务器发送请求。 | |
| camel-infinispan-starter | 从/写入 Infinispan 分布式键/值存储和数据网格。 | |
| camel-jira-starter | 与 JIRA 问题跟踪器交互。 | |
| camel-jms-starter | 发送和接收来自 JMS Queue 或 Topic 的信息。 | |
| camel-kafka-starter | 发送和接收来自 Apache Kafka 代理的信息。 | |
| camel-kamelet-starter | 调用 Kamelets | |
| camel-language-starter | 使用 Camel 支持的任何语言执行脚本。 | |
| camel-log-starter | 将消息记录到底层日志记录机制。 | |
| camel-mail-starter | 使用 imap、pop3 和 smtp 协议发送和接收电子邮件。 | |
| camel-master-starter | 集群中只有一个消费者从给定端点消耗;如果 JVM 结束,则自动故障转移。 | |
| camel-minio-starter | 使用 Minio SDK 从 Minio Storage Service 存储和检索对象。 | |
| camel-mllp-starter | 使用 MLLP 协议与外部系统通信。 | |
| camel-mock-starter | 使用模拟测试路由和介质规则。 | |
| camel-mongodb-starter | 对 MongoDB 文档和集合执行操作。 | |
| camel-netty-starter | 使用带有 Netty 4.x 的 TCP 或 UDP 的套接字级别网络。 | |
| camel-paho-starter | 使用 Eclipse Paho MQTT 客户端与 mq 消息代理通信。 | |
| camel-paho-mqtt5-starter | 使用 Eclipse Paho MQTT v5 客户端与 MQTT 消息代理进行通信。 | |
| camel-quartz-starter | 使用 Quartz 2.x 调度程序调度消息发送。 | |
| camel-ref-starter | 根据 Camel Registry 中的名称,将消息路由到端点动态查找。 | |
| camel-rest-starter | 公开 REST 服务或调用外部 REST 服务。 | |
| camel-salesforce-starter | 使用 Java DTO 与 Salesforce 通讯。 | |
| camel-scheduler-starter | 使用 java.util.concurrent.ScheduledExecutorService 以指定间隔生成消息。 | |
| camel-seda-starter | 在同一 JVM 中异步调用任何 Camel 上下文的另一个端点。 | |
| camel-servlet-starter | 通过 Servlet 提供 HTTP 请求。 | |
| camel-slack-starter | 向/从 Slack 发送和接收消息。 | |
| camel-sql-starter | 使用 Spring JDBC 执行 SQL 查询。 | |
| camel-stub-starter | 在开发或测试过程中了解任何物理端点。 | |
| camel-telegram-starter | 发送并接收作为站报 Bot 报 Bot API 的消息。 | |
| camel-timer-starter | 使用 java.util.Timer 以指定间隔生成消息。 | |
| camel-validator-starter | 使用 XML 架构和 JAXP 验证来验证有效负载。 | |
| camel-webhook-starter | 公开 Webhook 端点以接收用于其他 Camel 组件的推送通知。 | |
| camel-xslt-starter | 使用 XSLT 模板转换 XML 有效负载。 |
| 组件 | 工件 | 描述 |
|---|---|---|
| camel-avro-starter | 使用 Apache Avro 二进制数据格式序列化和反序列化消息。 | |
| camel-jackson-avro-starter | marshal POJOs 到 Avro,并使用 Jackson 回来。 | |
| camel-bindy-starter | 使用 Camel Bindy 在 POJO 和键值对(KVP)格式之间进行 marshal 和 unmarshal | |
| camel-hl7-starter | 使用 HL7 MLLP codec marshal 和 unmarshal HL7 (Health Liberty)模型对象。 | |
| camel-jacksonxml-starter | 将 XML 有效负载解压缩为 POJO,并使用 Jackson 的 XMLMapper 扩展返回。 | |
| camel-jaxb-starter | 将 XML 有效负载解压缩为 POJO,并使用 JAXB2 XML marshalling 标准。 | |
| camel-gson-starter | marshal POJOs 到 JSON,并使用 Gson 重新 | |
| camel-jackson-starter | marshal POJOs 到 JSON,并使用 Jackson 回来 | |
| camel-jackson-protobuf-starter | marshal POJOs 到 Protobuf,并使用 Jackson 回来。 | |
| camel-soap-starter | marshal Java 对象到 SOAP 消息,并返回。 | |
| camel-zipfile-starter | 使用 java.util.zip.ZipStream 压缩和解压缩流。 |
| 语言 | 工件 | 描述 |
|---|---|---|
| camel-core-starter | 固定值只在路由启动过程中设置一次。 | |
| camel-core-starter | 评估编译的简单表达式。 | |
| camel-core-starter | 从 Exchange 获取属性。 | |
| camel-core-starter | 简单语言的文件相关功能。 | |
| camel-core-starter | 从 Exchange 获取标头。 | |
| camel-jsonpath-starter | 根据 JSON 消息正文评估 JSONPath 表达式。 | |
| camel-core-starter | 使用 registry 中的现有表达式。 | |
| camel-core-starter | 评估 Camel 简单表达式。 | |
| camel-core-starter | 使用分隔符模式的令牌化文本有效负载。 | |
| camel-xml-jaxp-starter | 令牌化 XML 有效负载。 | |
| camel-xpath-starter | 根据 XML 有效负载评估 XPath 表达式。 | |
| camel-saxon-starter | 使用 XQuery 和 Saxon 查询和/或转换 XML 有效负载。 |
| 扩展 | 工件 | 描述 |
|---|---|---|
| camel-openapi-java-starter | rest-dsl 支持使用 openapi doc |
1.4. Starter 配置 复制链接链接已复制到粘贴板!
清除并可访问的配置是任何应用程序的重要部分。Camel 启动器完全支持 Spring Boot 的外部配置机制。您还可以通过 Spring Beans 配置它们,以获取更复杂的用例。
1.4.1. 使用外部配置 复制链接链接已复制到粘贴板!
在内部,每个 启动程序 都通过 Spring Boot 的 ConfigurationProperties 配置。每个配置参数都可以 以各种方式 设置(application.[properties|json|yaml] 文件、命令行参数、环境变量等。参数的格式为 camel.[component|language|dataformat].[name].[parameter]
例如,要配置您可以设置的 ActiveMQ 代理的 URL:
camel.component.activemq.broker-url=tcp://localhost:61616
camel.component.activemq.broker-url=tcp://localhost:61616
或者要配置 CSV 数据格式的 delimeter 为分号 (;),您可以设置:
camel.dataformat.csv.delimiter=;
camel.dataformat.csv.delimiter=;
当将属性设置为所需类型时,Camel 将使用 Type Converter 机制。
您可以使用 sVirt bean:name 在 Registry 中引用 Bean :
camel.component.jms.transactionManager=#bean:myjtaTransactionManager
camel.component.jms.transactionManager=#bean:myjtaTransactionManager
Bean 通常以 Java 为单位创建:
Bean 也可以在 配置文件中 创建,但不建议用于复杂的用例。
1.4.2. 使用 Beans 复制链接链接已复制到粘贴板!
也可以通过 Spring Beans 创建和配置启动程序。在创建入门程序之前,Camel 将首先在 Registry 中查找它(如果已存在)。例如,配置 Kafka 组件:
Bean 名称必须与您要配置的组件、数据格式或语言相同。如果没有在注解中指定 Bean 名称,它将设置为方法名称。
典型的 Camel Spring Boot 项目将组合使用外部配置和 Beans 来配置应用程序。有关如何配置 Camel Spring Boot 项目的更多信息,请参阅示例 存储库。
1.5. 使用 Maven 为 Spring Boot 应用程序生成 Camel 复制链接链接已复制到粘贴板!
您可以使用 Maven archetype org.apache.camel.archetypes:camel-archetype-spring-boot:3.18.3.redhat-00042 生成 Camel Spring Boot 应用程序。
流程
运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 构建应用程序:
mvn package -f csb-app/pom.xml
mvn package -f csb-app/pom.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行应用程序:
java -jar csb-app/target/csb-app-1.0-SNAPSHOT.jar
java -jar csb-app/target/csb-app-1.0-SNAPSHOT.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过检查由应用生成的 Hello World 输出的控制台日志来验证应用是否正在运行。
com.redhat.MySpringBootApplication : Started MySpringBootApplication in 3.514 seconds (JVM running for 4.006) Hello World Hello World
com.redhat.MySpringBootApplication : Started MySpringBootApplication in 3.514 seconds (JVM running for 4.006) Hello World Hello WorldCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6. 将 Camel Spring Boot 应用程序部署到 OpenShift 复制链接链接已复制到粘贴板!
本指南介绍了如何将 Camel Spring Boot 应用程序部署到 OpenShift。
先决条件
- 您可以访问 OpenShift 集群。
-
已安装 OpenShift
ocCLI 客户端,或者您可以访问 OpenShift Container Platform Web 控制台。
经认证的 OpenShift Container Platform 在 Camel for Spring Boot 支持的配置 中列出。以下示例中使用 Red Hat OpenJDK 11 (ubi8/openjdk-11)容器镜像。
流程
- 按照本指南的 Maven 为 Spring Boot 应用程序第 1.5 节为 Spring Boot 应用程序生成 Camel for Spring Boot 应用程序 中的说明,生成 Camel for Spring Boot 应用程序。
在存在修改的 pom.xml 目录下,执行以下命令。
mvn clean -DskipTests oc:deploy -Popenshift
mvn clean -DskipTests oc:deploy -PopenshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 CSB 应用程序是否在 pod 上运行。
oc logs -f dc/csb-app
oc logs -f dc/csb-appCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7. 将补丁应用到 Camel Spring Boot 复制链接链接已复制到粘贴板!
使用新的 patch-maven-plugin 机制,您可以对 Red Hat Camel Spring Boot 应用程序应用补丁。这种机制允许您更改由不同红帽应用程序 BOMS 提供的各个版本,例如 camel-spring-boot-bom。
patch-maven-plugin 的目的是将 Camel on Spring Boot BOM 中列出的依赖项版本更新为您要应用到应用程序的补丁元数据中指定的版本。
patch-maven-plugin 执行以下操作:
- 检索与当前红帽应用 BOM 相关的补丁元数据。
- 将版本更改应用到从 BOMs 导入的 <dependencyManagement>。
在 patch-maven-plugin 获取元数据后,它会迭代声明插件的项目的所有受管和直接依赖项,并使用 CVE/patch 元数据替换依赖项版本(如果匹配)。替换版本后,Maven 构建将继续并通过标准 Maven 项目阶段进行。
流程
以下流程解释了如何将补丁应用到您的应用程序。
将
patch-maven-plugin添加到项目的pom.xml文件中。patch-maven-plugin的版本必须与 Spring Boot BOM 上的 Camel 版本相同。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您运行任何
mvn clean deploy,mvn validate, 或mvn dependencies:tree命令时,插件通过项目模块搜索,以检查模块是否使用 Red Hat Camel Spring Boot BOM。只有以下内容是支持的 BOM:-
com.redhat.camel.springboot.platform:camel-spring-boot-bom: 用于 Camel Spring Boot BOM
-
如果插件找不到上述 BOM,插件会显示以下信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用了正确的 BOM,则会找到补丁元数据,但不找到任何补丁。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow patch-maven-plugin会尝试获取此 Maven 元数据。对于带有 Camel Spring Boot BOM 的项目,
com.redhat.camel.springboot.platform:redhat-camel-spring-boot-patch-metadata/maven-metadata.xml已解决。此 XML 数据是带有com.redhat.camel.springboot.platform:redhat-camel-spring-boot-patch-metadata:RELEASE协调的工件的元数据。Maven 生成的元数据示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
patch-maven-plugin解析元数据,以选择应用到当前项目的版本。此操作只能针对使用带有特定版本的 Spring Boot BOM 上的 Camel 进行 Maven 项目。只有与版本范围或之后匹配的元数据才适用,它只获取元数据的最新版本。 patch-maven-plugin收集远程 Maven 存储库列表,以下载由groupId、artifactId和版本标识的补丁元数据。这些 Maven 存储库列在活跃配置集的项目 <repositories> 元素中,以及settings.xml文件中的存储库。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 元数据来自远程存储库、本地存储库还是 ZIP 文件,它由
patch-maven-plugin分析。获取的元数据包含 CVE 列表以及每个 CVE,我们有一个受影响的 Maven 工件列表(由 glob 模式和版本范围指定)以及包含给定 CVE 修复的版本。例如,Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最后,当迭代当前项目中所有受管依赖项时,会参考补丁元数据中指定的修复列表。匹配的这些依赖项(和受管依赖项)被改为固定的版本。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
跳过补丁
如果您不想将特定的补丁应用到项目,patch-maven-plugin 会提供 skip 选项。假设已将 patch-maven-plugin 添加到项目的 pom.xml 文件中,并且您不想更改版本,您可以使用以下方法之一跳过补丁。
-
将 skip 选项添加到项目的
pom.xml文件中,如下所示:
-
或者,在运行
mvn命令时使用-DskipPatch选项,如下所示:
如以上输出中显示,patch-maven-plugin 没有被调用,这会导致补丁没有被应用到应用程序。
第 2 章 迁移到 Camel Spring Boot 复制链接链接已复制到粘贴板!
本指南提供有关在 Spring Boot 上从 Red Hat Fuse 7 迁移到 Camel 3 的信息。
2.1. Java 版本 复制链接链接已复制到粘贴板!
Camel 3 支持 Java 11,但不支持 Java 8。在 Java 11 中,JAXB 模块已从 JDK 中删除,因此您需要将它们添加为 Maven 依赖项(如果您使用 JAXB,如在使用 XML DSL 或 camel-jaxb 组件时):
2.2. camel-core 的修改 复制链接链接已复制到粘贴板!
在 Camel 3.x 中,camel-core 被分成多个 JAR,如下所示:
- camel-api
- camel-base
- camel-caffeine-lrucache
- camel-cloud
- camel-core
- camel-jaxp
- camel-main
- camel-management-api
- camel-management
- camel-support
- camel-util
- camel-util-json
Apache Camel 的 Maven 用户可以继续使用依赖 camel-core,其对所有模块具有传输的依赖关系,但 camel-main 除外,因此不需要迁移。
2.3. 对组件的修改 复制链接链接已复制到粘贴板!
在 Camel 3.x 中,一些 camel-core 组件被移到独立的组件中。
- camel-attachments
- camel-bean
- camel-browse
- camel-controlbus
- camel-dataformat
- camel-dataset
- camel-direct
- camel-directvm
- camel-file
- camel-language
- camel-log
- camel-mock
- camel-ref
- camel-rest
- camel-saga
- camel-scheduler
- camel-seda
- camel-stub
- camel-timer
- camel-validator
- camel-vm
- camel-xpath
- camel-xslt
- camel-xslt-saxon
- camel-zip-deflater
2.4. Spring Boot 启动程序的更改 复制链接链接已复制到粘贴板!
Spring Boot 启动器的 Maven groupId 从 org.apache.camel 更改为 org.apache.camel.springboot。
示例
使用:
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-component-starter</artifactId> </dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-component-starter</artifactId>
</dependency>
而不是
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-component-starter</artifactId> </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-component-starter</artifactId>
</dependency>
2.5. 不支持每个应用程序有多个 CamelContexts 复制链接链接已复制到粘贴板!
对多个 CamelContexts 的支持已被删除,推荐支持每个部署的一个 CamelContext。因此,各种 Camel 注解上的 context 属性(如 @EndpointInject、@Produce、@Consume 等)已被删除。
2.6. 弃用的 API 和组件 复制链接链接已复制到粘贴板!
Camel 2.x 中的所有已弃用的 API 和组件都已在 Camel 3 中删除。
2.6.1. 删除的组件 复制链接链接已复制到粘贴板!
Camel 2.x 中的所有已弃用的组件都在 Camel 3.x 中删除,包括旧的 camel-http, camel-hdfs, camel-mina, camel-mongodb, camel-netty, camel-netty-http, camel-quartz, camel-restlet 和 camel-rx 组件。
-
删除了
camel-jibx组件。 -
删除了
camel-boon数据格式。 -
删除了
camel-linkedin组件,因为 Linkedin API 1.0 不再被支持。CAMEL-13813 跟踪了对新 2.0 API 的支持。 -
camel-zookeeper删除了其路由策略功能,而是使用ZooKeeperClusterService或camel-zookeeper-master组件。 -
camel-jetty组件不再支持制作者(已删除),改为使用camel-http组件。 -
删除了
twitter-streaming组件,因为它依赖于已弃用的 Tailoring Streaming API,且无法正常工作。
2.6.2. 重命名的组件 复制链接链接已复制到粘贴板!
以下组件在 Camel 3.x 中重命名。
-
测试组件已重命名为dataset-test,并将camel-core移到camel-datasetJAR 中。 -
http4组件已重命名为http,它对应的组件软件包从org.apache.camel.component.http4重命名为org.apache.camel.component.http。现在,支持的方案只是http和https。 -
hdfs2组件已重命名为hdfs,它对应于从org.apache.camel.component.hdfs2到org.apache.camel.component.hdfs的组件软件包。现在,支持的方案是hdfs。 -
mina2组件已重命名为mina,它对应于来自从org.apache.camel.component.mina2到org.apache.camel.component.mina2 的软件包。现在,支持的方案为mina。 -
mongodb3组件已重命名为mongodb,它是从org.apache.camel.component.mongodb3到org.apache.camel.component.mongodb的对应组件软件包。现在,支持的方案是mongodb。 -
netty4-http组件已重命名为netty-http,它将org.apache.camel.component.netty4.http中的相应组件软件包重命名为org.apache.camel.component.netty.http。现在,支持的方案为netty-http。 -
netty4组件已重命名为netty,它是从org.apache.camel.component.netty4到org.apache.camel.component.netty的对应组件软件包。现在,支持的方案为netty。 -
quartz2组件已重命名为quartz,它对应于从org.apache.camel.component.quartz2到org.apache.camel.component.quartz的组件软件包。现在,支持的方案是quartz。 -
rxjava2组件已重命名为rxjava,它对应于从org.apache.camel.component.rxjava2到org.apache.camel.component.rxjava的组件软件包。 -
将
camel-jetty9重命名为camel-jetty。现在,支持的方案为jetty。
2.6.3. 模拟组件 复制链接链接已复制到粘贴板!
模拟 组件已从 camel-core 移出。由于这种方法在其 断言条款构建器上 被移除。
2.6.4. ActiveMQ 复制链接链接已复制到粘贴板!
如果使用 activemq-camel 组件,您应该迁移到使用 camel-activemq 组件,其中组件名称已从 org.apache.activemq.camel.component.ActiveMQComponent 改为 org.apache.camel.component.activemq.ActiveMQComponent。
2.6.5. AWS 复制链接链接已复制到粘贴板!
组件 camel-aws 已分成多个组件:
- camel-aws-cw
- camel-aws-ddb (包含 ddb 和 ddbstreams 组件)
- camel-aws-ec2
- camel-aws-iam
- camel-aws-kinesis (包含 kinesis 和 kinesis-firehose 组件)
- camel-aws-kms
- camel-aws-lambda
- camel-aws-mq
- camel-aws-s3
- camel-aws-sdb
- camel-aws-ses
- camel-aws-sns
- camel-aws-sqs
- camel-aws-swf
建议为这些组件添加 specifc 依赖项。
2.6.6. FHIR 复制链接链接已复制到粘贴板!
camel-fhir 组件已将其 hapi-fhir 依赖项升级到 4.1.0。默认 FHIR 版本已改为 R4。因此,如果需要 DSTU3,则必须明确设置它。
2.6.7. Kafka 复制链接链接已复制到粘贴板!
camel-kafka 组件删除了选项 bridgeEndpoint 和 circularTopicDetection,因为该组件不再需要,因为组件在 Camel 2.x 上可以正常工作。换句话说,camel-kafka 将向来自端点 uri 的主题发送消息。要覆盖此功能,请使用带有新主题的 KafkaConstants.OVERRIDE_TOPIC 标头。请参阅 camel-kafka 组件文档以了解更多信息。
2.6.8. 电话报 复制链接链接已复制到粘贴板!
camel-telegram 组件已将授权令牌从 uri-path 移到查询参数,例如 migrate
telegram:bots/myTokenHere
telegram:bots/myTokenHere
to
telegram:bots?authorizationToken=myTokenHere
telegram:bots?authorizationToken=myTokenHere
2.6.9. JMX 复制链接链接已复制到粘贴板!
如果您只使用 camel-core 作为依赖项运行 Camel 独立,并且您希望启用 JMX,那么您需要将 camel-management 添加为依赖项。
对于使用 ManagedCamelContext,现在您需要从 CamelContext 获取此扩展,如下所示:
ManagedCamelContext managed = camelContext.getExtension(ManagedCamelContext.class);
ManagedCamelContext managed = camelContext.getExtension(ManagedCamelContext.class);
2.6.10. XSLT 复制链接链接已复制到粘贴板!
XSLT 组件已从 camel-core 移到 camel-xslt 和 camel-xslt-saxon 中。组件被分开,因此 camel-xslt 使用 JDK XSTL 引擎(Xalan)和 camel-xslt-saxon 是使用 Saxon 时。这意味着您应该使用 xslt 和 xslt-saxon 作为 Camel 端点 URI 中的组件名称。如果您使用 XSLT 聚合策略,则使用 org.apache.camel.component.xslt.saxon.XsltSaxonAggregationStrategy 用于 Saxon 支持。在使用 xslt 构建器时,将 org.apache.camel.component.xslt.saxon.XsltSaxonBuilder 用于 Saxon 支持。另请注意,只有 camel-xslt-saxon 也支持 allowStax,因为 JDK XSLT 不支持它。
2.6.11. XML DSL 迁移 复制链接链接已复制到粘贴板!
XML DSL 稍有变化。
自定义负载均衡器 EIP 已从 < custom> 改为 < customLoadBalancer>
在 <secureXML> tag 中,XMLSecurity 数据格式将属性 keyOrTrustStoreParametersId 重新命名为 keyOrTrustStoreParametersRef。
& lt;zipFile& gt; 数据格式已重命名为 < zipfile>。
2.7. 迁移 Camel Maven 插件 复制链接链接已复制到粘贴板!
camel-maven-plugin 已分成两个 maven 插件:
camel-maven-plugin-
camel-maven-plugin 具有
运行目标,旨在快速运行 Camel 应用程序。如需更多信息,请参阅 https://camel.apache.org/manual/camel-maven-plugin.html。 camel-report-maven-plugin-
camel-report-maven-plugin具有validate和route-coverage目标,用于生成 Camel 项目报告,如验证 Camel 端点 URI 和路由覆盖报告等。如需更多信息,请参阅 https://camel.apache.org/manual/camel-report-maven-plugin.html。