1.3. 迁移到 Apache Camel 3
本指南提供有关从 Red Hat Fuse 7 迁移到 Camel 3 的信息
在组件(如模块化和 XML 架构更改)中 Fuse 7 和 Camel 3 之间存在重要区别。详情请查看每个组件部分。
红帽构建的 Apache Camel for Quarkus 支持 Camel 版本 4。本节提供有关当您将 Red Hat Fuse 7 应用程序迁移到带有 Camel 版本 3 的红帽构建的 Apache Camel 时有关升级 Camel 的信息。
1.3.1. Java 版本
Camel 3 支持 Java 17 和 Java 11,但不支持 Java 8。
1.3.1.1. JDK 11 中删除了 JAXB
在 Java 11 中,JAXB 模块已从 JDK 中删除,因此您需要将它们添加为 Maven 依赖项(如使用 XML DSL 或 camel-jaxb 组件时)的 JAXB :
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.2</version> </dependency>
Java Platform Standard Edition 11 Development Kit (JDK 11)在发行版本 Camel 3.x 中已弃用,且版本 4.x 不支持。
1.3.2. camel-core 的 Modularization
在 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
除外,因此不需要迁移。
1.3.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
1.3.4. 不支持每个应用程序有多个 CamelContexts
删除了对多个 CamelContexts 的支持,建议并对每个部署有一个 CamelContext。因此,删除了不同 Camel 注解上的 context
属性,如 @EndpointInject
、@Produce
、@Consume
等。
1.3.5. 弃用的 API 和组件
Camel 2.x 中的所有已弃用的 API 和组件都已在 Camel 3 中删除。
1.3.5.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
dataformat ,camel-linkedin
- Linkedin API 不再被支持。
camel-zookeeper
-
组件路由策略功能已被删除。使用
ZooKeeperClusterService
或camel-zookeeper-master
替代。 camel-jetty
-
不再支持
producer
(已移除)。改为使用camel-http
组件。 twitter-streaming
- 删除了因为它依赖于已弃用的 Artistic Streaming API,因此不再起作用。
1.3.5.2. 重命名组件
以下组件在 Camel 3.x 中重命名。
camel-microprofile-metrics
-
重命名为
camel-micrometer
test
-
重命名为
dataset-test
,并从camel-core
移到camel-dataset
JAR。 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.mina
2 的组件软件包。支持的方案现在是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
。
1.3.6. 对 Camel 组件的更改
1.3.6.1. Mock 组件
mock
组件已从 camel-core
中移出。由于其 assertion 子句构建器 上的多个方法已被删除。
1.3.6.2. ActiveMQ
如果您使用 activemq-camel
组件,则您应该迁移到使用 camel-activemq
组件,其中组件名称已从 org.apache.activemq.camel.component.ActiveMQComponent
改为 org.apache.camel.component.activemq.ActiveMQComponent
。
1.3.6.3. 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
建议为这些组件添加特定的依赖项。
1.3.6.4. Camel CXF
camel-cxf
JAR 已划分为 SOAP 与 REST。从 camel-cxf
进行迁移时,我们建议您从以下列表中选择特定的 JAR。
-
camel-cxf-soap
-
camel-cxf-rest
-
camel-cxf-transport
例如,如果您在 SOAP 中使用 CXF,则在从 camel-cxf
进行迁移时选择 camel-cxf-soap
和 camel-cxf-transport
。
1.3.6.4.1. Camel CXF 更改了命名空间
camel-cxf
XML XSD 模式也更改了命名空间。
旧命名空间 | 新命名空间 |
---|---|
camel-cxf
SOAP 组件被移到一个新的 jaxws
子软件包中,即 org.apache.camel.component.cxf
现在是 org.apache.camel.component.cxf.jaws
。例如,CxfComponent
类现在位于 org.apache.camel.component.cxf.jaxws
中。
1.3.6.5. FHIR
camel-fhir 组件将其 hapi-fhir 依赖项升级到 4.1.0。默认 FHIR 版本已改为 R4。因此,如果需要明确设置 DSTU3,则必须明确设置它。
1.3.6.6. Kafka
camel-kafka
组件已删除了 bridgeEndpoint
和 circularTopicDetection
选项,因为组件充当 Camel 2.x 的桥接。换句话说,camel-kafka
将从端点 uri 中发送消息到主题。要覆盖它,请使用带有新主题的 KafkaConstants.OVERRIDE_TOPIC
标头。请参阅 camel-kafka
组件文档以了解更多信息。
1.3.6.7. telegram
camel-telegram
组件已将身份验证令牌从 uri-path 移到查询参数,如 migrate
telegram:bots/myTokenHere
to
telegram:bots?authorizationToken=myTokenHere
1.3.6.8. JMX
如果您只使用 camel-core
作为依赖项运行 Camel 独立,并且您希望开箱即用 JMX,则需要添加 camel-management
作为依赖项。
对于使用 ManagedCamelContext
,现在您需要从 CamelContext
获取此扩展,如下所示:
ManagedCamelContext managed = camelContext.getExtension(ManagedCamelContext.class);
1.3.6.9. XSLT
XSLT 组件已从 camel-core 移到 camel-xslt
和 camel-xslt-saxon
。组件被分隔,因此 camel-xslt
用于使用 JDK XSTL 引擎(Xalan),camel-xslt-saxon
是使用 Saxon 时的。这意味着您应该在 Camel 端点 URI 中使用 xslt
和 xslt-saxon
作为组件名称。如果您使用 XSLT 聚合策略,请将 org.apache.camel.component.xslt.saxon.XsltSaxonAggregationStrategy
用于 Saxon 支持。如果使用 xslt 构建器,并使用 org.apache.camel.component.xslt.saxon.XsltSaxonBuilder
作为 Saxon 支持。另请注意,allowStax
只在 camel-xslt-saxon
中被支持,因为 JDK XSLT 不支持它。
1.3.6.10. XML DSL 迁移
XML DSL 稍有变化。
自定义负载均衡器 EIP 已从 < custom> 改为 <
; customLoadBalancer>
在 <secureXML>
tag 中,XMLSecurity 数据格式将属性 keyOrTrustStoreParametersId
重新命名为 keyOrTrustStoreParametersRef
。
& lt;zipFile>
; 数据格式已重命名为 < zipfile>
。
1.3.7. 迁移 Camel Maven 插件
camel-maven-plugin
已分成两个 maven 插件:
camel-maven-plugin
-
camel-maven-plugin 具有
run
目标,旨在快速运行 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。