迁移指南
迁移到 Red Hat Fuse 7.8
摘要
前言
本指南提供有关更新 Red Hat Fuse 和 Fuse 应用程序的信息:
如果您要从 Fuse 6 迁移到最新的 Fuse 7 版本,请在本指南中的说明操作,请按照 Red Hat Fuse 7.0 迁移 指南中的说明进行操作。
第 3 章 在 Spring Boot 独立升级 Fuse 应用程序
第 1 章 升级 Fuse Online
Fuse Online 升级过程取决于 Fuse Online 是否安装在 Red Hat OpenShift Online 或 OpenShift Container Platform (OCP)上。
- OpenShift Online - 发布 Fuse 7.8 时,OpenShift Online 上的 Fuse Online 基础架构会自动升级。如升级在 OpenShift Online 上运行的 Fuse Online 集成 中所述, 您必须重新发布任何正在运行的集成。
OCP - 要升级在 OpenShift Container Platform 现场运行的 Fuse Online 环境,您应该首先为 Fuse 备份和恢复数据库设置对 Docker 镜像的访问权限,如 升级前访问 Docker 镜像 中所述。
升级 Fuse 的步骤取决于您如何安装 Fuse:
- 如果您使用 OperatorHub 安装 Fuse,请参阅使用 OperatorHub 升级 Fuse。
- 如果您使用安装脚本安装 Fuse,请参阅使用 安装脚本升级 Fuse。
要升级集成,您还应考虑 Apache Camel 更新,如 Camel 迁移注意事项 中所述。
1.1. 在升级前访问 Docker 镜像
默认情况下,Fuse Online 升级过程从 docker.io registry 中拉取 Fuse Online 备份和恢复数据库的 Docker 镜像,而不是从 registry.redhat.io 中拉取它们(如已知问题 https://issues.redhat.com/browse/ENTESB-15364中所述)。因为 docker.io 对免费下载实施服务限制,因此在尝试下载备份和恢复数据库镜像时,Fuse Online 升级过程可能会遇到以下错误:
error: code = Unknown desc = toomanyrequests: You have reached your pull rate limit
有关 Docker Hub 拉取速率限制的更多信息,请参阅 Docker 文档(https://www.docker.com/increase-rate-limits)。
为了避免在启动 Fuse 在线升级过程前遇到 Docker 限制错误,请确保您有权访问 Docker 镜像。如何访问 Docker 镜像取决于 OpenShift Container Platform (OCP)版本:
- 对于 OCP 4.6,将 Docker Hub 凭证添加到现有的复合 pull secret 中,如 访问 OCP 4.6 上的 Docker 镜像 中所述。将 Docker 凭证添加到复合 pull secret 时,会根据 Docker Hub 帐户类型提高对 API 的 Docker Hub 限制。
-
对于 OCP 3.11,将 Fuse Online 备份和恢复数据库镜像从
docker.io恢复到本地缓存,如 访问 OCP 3.11 中的 Docker 镜像 中所述。
1.1.1. 访问 OCP4 上的 Docker 镜像
为了避免在启动 Fuse Online 升级过程前遇到可能的 Docker 限制错误,请将 docker 凭证添加到复合的 pull secret 中。
前提条件
有 OpenShift 集群管理员访问权限。
流程
将 Docker Hub 凭证添加到现有的复合 pull secret 中:
使用您的管理员凭证登录到 OpenShift:
oc login -u system:admin
运行以下命令,检索您的复合 pull secret:
oc get secrets syndesis-pull-secret -o=custom-columns=SECRET:.data.* --no-headers | base64 -d | jq
这个命令返回类似如下的输出,其中 <AUTH> 是您在 base64 中编码的用户名和密码:
{ "auths":{ "registry.redhat.io":{ "username":"<AUTH>", "password":"<AUTH>", "auth":"<AUTH>" }, <You can have more auths elements here> } }要添加 Docker Hub registry 凭证,请编辑 pull secret 并将其保存到 PULL_SECRET 变量中:
PULL_SECRET=$(base64 -w 0 <<EOF { "auths":{ "registry.redhat.io":{ "username":"<AUTH>", "password":"<AUTH>", "auth":"<AUTH>" }, <You can have more auths elements here> }, "https://index.docker.io/v1/": { "auth": "<AUTH>" } } } EOF )要修补您的复合 pull secret,请运行以下命令:
oc apply -f - <<EOF apiVersion: v1 kind: Secret metadata: name: syndesis-pull-secret data: .dockerconfigjson: $PULL_SECRET type: kubernetes.io/dockerconfigjson EOF
后续步骤
- 如果您使用 OperatorHub 安装 Fuse 在线,请参阅使用 OperatorHub 升级 Fuse Online。
- 如果您使用安装脚本安装 Fuse 在线,请参阅使用 安装脚本升级 Fuse Online。
1.1.2. 访问 OCP 3.11 上的 Docker 镜像
为了避免在 OCP 3.11 上启动 Fuse Online 升级过程前遇到可能的 Docker 限制错误,您应该将所需的镜像从 docker.io 拉取到本地缓存。
前提条件
有 OpenShift 集群管理员访问权限。
流程
使用您的 OpenShift 用户名和 OpenShift 集群 URL 登录 OpenShift 节点:
ssh login <user>@node1.<clusterUrl>
使用您的用户名和密码登录到 docker:
sudo docker login -u <username> -p <password> docker.io
运行以下命令拉取 PostgreSQL 镜像:
sudo docker pull crunchydata/crunchy-pgdump:centos7-10.11-4.2.1 sudo docker pull crunchydata/crunchy-pgrestore:centos7-10.11-4.2.1 sudo docker pull centos:7
PostgresQL 镜像拉取到 OpenShift 节点的内部 docker registry。
- 为每个 OpenShift 节点重复上述步骤。
后续步骤
按照使用安装脚本 升级 Fuse Online 中的步骤升级 Fuse Online。
1.2. 使用 OperatorHub 升级 Fuse Online
从 OCP 4.6 开始,OperatorHub 提供了 Fuse Online 7.8。如果使用 OCP 4.5,如果要安装 Fuse Online 7.8,则必须升级到 OCP 4.6。
注: 如果您使用安装脚本安装 Fuse Online 7.7,您应该使用安装脚本升级到 Fuse Online 7.8,如 使用安装脚本升级 Fuse Online 所述。
安装 Fuse Online 时,您可以使用 fuse-online-v7.n 格式指定一个频道,其中 n 是当前的版本号。例如,对于 Fuse Online 7.8,频道是 fuse-online-v7.8。
从 Fuse Online 7.8 版本升级到较新的 Fuse Online 7.8 版本取决于您在安装 Fuse Online 时选择 的批准策略 :
- 对于自动更新,当有新版本的 Fuse Online 操作器可用时,OpenShift Operator Lifecycle Manager (OLM)会自动升级 Fuse Online 的运行实例,而无需人为干预。
- 对于 手动更新,当有新版 Operator 可用时,OLM 会创建更新请求。作为集群管理员,您必须手动批准该更新请求,将 Fuse Online operator 更新至新版本,如 手动批准 OpenShift 文档的待处理 Operator 升级 部分所述。
在基础架构升级过程中和之后,现有集成将继续与 旧版本的 Fuse Online 库和依赖项运行。要使用更新的版本运行,您必须重新发布它们。
对于 OCP 4.6 及更新的版本,若要从 Fuse Online 7.7 升级到 7.8,请使用以下步骤。
流程
- 为了避免在启动 Fuse Online 升级过程前遇到 Docker 限制错误,请将 docker 凭证添加到复合的 pull secret 中,如 升级前访问 Docker 镜像 中所述。
升级 Fuse Online 操作器:
- 在 OpenShift web 控制台中,点 Operators > Installed Operators。
- 单击 Fuse Online 操作器,然后单击 Subscription。
- 在 Channel 旁边,点 Edit 图标。
- 选择 fuse-online-v7.8 频道,然后点 Save。
如果在安装 Fuse Online 时指定了 手动更新,请按照 OpenShift 文档 手动批准待处理的 Operator 升级部分中的说明批准 Operator 更新请求。
1.3. 使用安装脚本升级 Fuse Online
如果您使用安装脚本(而不是 OperatorHub)安装 Fuse Online,以下是升级 Fuse Online 的一般步骤:
集群管理员为 Fuse 在线备份和恢复数据库设置对 Docker 镜像的访问权限:
- 对于 OCP 3.11,将 Fuse 在线备份并将数据库镜像从 docker.io 拉取到本地缓存。
- 对于 OCP 4.6,将 Docker Hub 凭证添加到现有的复合 pull secret 中。
- 下载最新的 Fuse 在线版本。
- 获取从集群管理员升级 Fuse Online 的权限。
- 运行更新脚本。
以下升级的升级步骤是相同的:
- 从 Fuse Online 7.7 到 Fuse Online 7.8
- 从 Fuse Online 7.8 版本到较新的 Fuse Online 7.8 版本
先决条件
您已在 OCP 现场安装并运行 Fuse Online 的版本 7.7。或者,您安装并运行 OCP 3.11 上 Fuse Online 的 7.8 版本,您想要升级到新的应用程序镜像。
对于早期版本:
- 如果您在 OCP 上运行 Fuse Online 版本 7.6,则必须 升级到 7.7,然后您可以升级到 7.8。
- 如果您在 OCP 上运行 Fuse Online 版本 7.5,则必须 升级到 7.6,然后您可以升级到 7.7。
- 如果您在 OCP 上运行 Fuse Online 版本 7.4,则必须 升级到 7.5,然后您可以升级到 7.6。
- 如果您在 OCP 上运行 Fuse Online 版本 7.3,则必须 升级到 7.4,然后您可以升级到 7.5。
- 如果您在 OCP 上运行 Fuse Online 版本 7.2,则必须 升级到 7.3。
- 如果您在 OCP 上运行 Fuse Online 版本 7.1,则必须 升级到 7.2。
-
已安装
oc客户端工具,并将其连接到安装了 Fuse Online 的 OCP 集群。 - 有集群管理权限,此流程中的前两个步骤需要这个权限。
流程
- 为了避免遇到可能的 Docker 限制错误,集群管理员会设置对 Docker 镜像的访问权限,如 升级前访问 Docker 镜像 中所述。
集群管理员下载 Fuse Online 软件包,并授予用户在特定项目中升级 Fuse Online 的权限:
从以下位置下载包含 Fuse 在线安装脚本的软件包:
https://github.com/syndesisio/fuse-online-install/releases/tag/1.11
在文件系统中方便的位置解包下载的存档。
fuse-online-install-1.11目录包含用于升级 Fuse Online 的脚本和支持文件。更改到包含提取存档的目录。例如:
cd fuse-online-install-1.11使用集群管理帐户登录到 OpenShift,例如:
oc login -u admin -p admin切换到需要升级 Fuse Online 的 OpenShift 项目,例如:
oc project fuse-online-project更新 Fuse Online 自定义资源定义:
bash install_ocp.sh --setup仅授予在这个项目中升级 Fuse Online 的权限。例如,以下命令向
developer用户授予将 Fuse Online 升级权限。在集群管理员运行此命令后,开发人员用户只能在这个项目中升级 Fuse Online,本例中为fuse-online-project:bash install_ocp.sh --grant developer
被授予升级 Fuse Online 的权限的用户执行升级:
登录到 OpenShift,例如:
oc login -u developer切换到要升级 Fuse Online 的项目,例如:
oc project fuse-online-project要检查您要升级到的版本,请使用
--version选项运行更新脚本,如下所示:bash update_ocp.sh --version按如下方式调用更新脚本:
bash update_ocp.sh要了解更多有关脚本的信息,请调用
bash update_ocp.sh --help。在基础架构升级过程中和之后,现有集成将继续与 旧版本的 Fuse Online 库和依赖项运行。
升级 Fuse Online 集成,如下所示:
- 在 Fuse Online 中,选择您要升级的集成。
- 选择 编辑。
- 选择 Publish 来重新发布集成。
重新发布集成会强制重新构建使用最新的 Fuse 在线依赖项。
1.4. Camel 迁移注意事项
红帽 Fuse 使用 Apache Camel 2.23。升级到 Fuse 7.8 时,您应该考虑对 Camel 2.22 和 2.23 的以下更新。
Camel 2.22 更新
- Camel 从 Spring Boot v1 升级到 v2,因此不再支持 v1。
- 升级到 Spring Framework 5。Camel 应该与 Spring 4.3.x 一起工作,但在未来的 Spring 5.x 将会是最低的 Spring 版本。
- 升级到 Karaf 4.2。您可以在 Karaf 4.1 上运行 Camel,但我们在此版本中仅正式支持 Karaf 4.2。
- 使用 toD DSL 优化,以将端点和制作者重新用于组件。例如,基于 HTTP 的组件现在将利用动态 URI 发送到同一主机的生成者(HTTP 客户端)。
- 现在,可以配置具有 read-lock idempotent/idempotent-changed 的 File2 使用者,以延迟发行任务,以便在文件被视为进程中时扩展窗口,这可用于具有共享的幂等存储库的 active/active 集群设置,以确保其他节点没有太快地将已处理的文件作为文件(如果您有 readLockRemoveOnCommit=true 时才需要)。
- 允许以 request/reply 模式在 Netty4 producer 上插件自定义请求/回复 ID 管理器实现。Twitter 组件现在默认使用扩展模式来支持大于 140 个字符的 tweets
- REST DSL 生成者现在支持使用 endpointProperties 在 REST 配置中配置。
- Kafka 组件现在支持 HeaderFilterStrategy 来插件自定义实现,以控制 Camel 和 Kafka 信息之间的标头映射。
- REST DSL 现在支持客户端请求验证 REST 服务是否可以验证 Content-Type/Accept 标头。
- Camel 现在有一个 Service Registry SPI,它允许您使用 Camel 实现或 Spring Cloud 将路由注册到服务 registry (如 consul、etcd 或 zookeeper)。
- SEDA 组件现在的默认队列大小为 1000,而不是无限。
以下值得注意的问题已被修复:
- 修复了带有 camel-cxf 消费者的 CXF 持续超时问题,可能会导致消费者返回带有数据的响应,而不是触发调用 SOAP 客户端的超时。
- 修复了 camel-cxf 消费者在使用强大的单向操作时不会发布 UoW。
- 修复了使用 AdviceWith 并使用 weave 方法 onException 等问题。
- 修复了并行处理和流模式中的 Splitter 可能会阻止,当迭代消息正文时,第一次调用 next ()方法调用时,迭代消息正文。
- 修复了 Kafka 消费者,如果 autoCommitEnable=false,则不会自动提交。
- 修复了文件消费者默认使用 markerFile 作为 read-lock,它应该没有。
- 修复了使用带有 Kafka 的手动提交的问题,以提供当前的记录偏移,而不是之前(第一个为 -1)。
- 修复了 Java DSL 中基于内容的路由路由器,可能无法解析 predicates 中的属性占位符。
Camel 2.23 更新
- 升级到 Spring Boot 2.1。
- 现在,可以使用 spring-boot 自动配置来配置额外的组件级别选项。这些选项包含在 spring-boot 组件元数据 JSON 文件描述符中,以获得工具协助。
- 添加了一个文档部分,其中包含所有组件、数据格式和语言的所有 Spring Boot auto 配置选项。
-
所有 Camel Spring Boot starter JAR 现在在其 JAR 中包含
META-INF/spring-autoconfigure-metadata.properties文件,以优化 Spring Boot 自动配置。 - Throttler 现在支持基于动态表达式的关联组,以便您可以将消息分组到不同的节流集合中。
- Hystrix EIP 现在允许继承 Camel 的错误处理程序,以便在启用了带有 redeliveries 的错误处理时再次重试整个 Hystrix EIP 块。
- SQL 和 ElSql 用户现在支持路由表单中的动态查询参数。请注意,这个功能仅限于使用简单表达式调用 Bean。
- swagger-restdsl maven 插件现在支持从 Swagger 规格文件生成 DTO 模型类。
以下值得注意的问题已被修复:
- 修正了 Aggregator2,不会传播控制标头以强制完成所有组,因此如果其他聚合器 EIP 在路由过程中正在使用另一个聚合器 EIP,则不会再次发生。
- 修复了在错误处理程序中重新传送被激活时的 Tracer 无法正常工作。
- XML 文档的内置类型转换器可能会将错误输出到 stdout,现在它已被修复为使用日志记录 API 的输出。
- 修复了当消息正文基于流处理时,使用 charset 选项编写文件的 SFTP 无法正常工作。
- 修复了当在多个路由路由时不会重复使用的 Zipkin root id,将它们分组到一个父 span 中。
- 修复了在主机名包含带有数字的 IP 地址时,使用 HTTP 端点进行优化的问题。
- 修复了在临时队列中带有请求/回复的 RabbitMQ 的问题,并使用手动确认模式。它不会确认临时队列(需要进行请求/回复)。
- 修复了各种 HTTP 消费者组件,它们可能无法在 Allow header for OPTIONS 请求(比如使用 rest-dsl 时)返回所有允许的 HTTP 动词。
- 修复了 FluentProducerTemplate 的 thread-safety 问题。
第 2 章 升级到 Spring Boot 2
本章介绍了如何将应用程序从 Spring Boot 1 升级到 Spring Boot 2.0。
2.1. 开始前
在开始迁移到 Spring Boot 2 之前,您必须检查系统要求和依赖项。
升级到最新的 1.5.x 版本
- 开始之前,请先升级到最新的 1.5.x 可用版本。这是为了确保您正在根据该行的最新依赖项进行构建。
查看依赖项
- 迁移到 Spring Boot 2 将导致升级多个依赖项。查看带有 2.0.x 的依赖项管理 1.5.x 的依赖项管理,以评估您的项目会受到影响。
- 识别不是由 Spring Boot 管理的依赖项的兼容版本,然后为这些定义显式版本。
查看自定义配置
- 可能需要在升级过程中检查项目定义的任何自定义配置。如果它可以被使用标准自动配置替换,请在升级前执行此操作。
查看系统要求
- Spring Boot 2.0 需要 Java 8 或更高版本。
- 它还需要 Spring Framework 5.0。
- Java 6 和 7 不再被支持。
2.2. 从 Spring Boot 1 升级到 Spring Boot 2
查看项目及其依赖项后,请升级到 Spring Boot 2.x 的最新维护版本。建议您在阶段升级。例如,首先从 Spring Boot 1.5 升级到 Spring Boot 2.0,然后升级到 2.1,然后升级到 Spring Boot 2 的最新维护版本。
迁移配置属性
使用 Spring Boot 2.0 时,许多配置属性被重命名或删除。因此,您需要相应地更新 application.properties/application.yml。您可以使用新的 spring-boot-properties-migrator 模块的帮助来实现这一点。将作为依赖项添加到项目后,这不仅会分析应用程序的环境和在启动时打印诊断,而且还会在运行时暂时迁移属性。
流程
-
将
spring-boot-properties-migrator模块添加到项目的pom.xml的 dependencies 部分。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
runtime("org.springframework.boot:spring-boot-properties-migrator")完成迁移后,请确保从项目的依赖项中删除此模块。
第 3 章 在 Spring Boot 独立升级 Fuse 应用程序
在 Spring Boot 上升级 Fuse 应用程序:
- 您应该考虑 Apache Camel 更新,如 第 3.1 节 “Camel 迁移注意事项” 所述。
- 您必须更新 Fuse 项目的 Maven 依赖项,以确保您使用正确的 Fuse 版本。
通常,您可以使用 Maven 构建 Fuse 应用程序。Maven 是 Apache 的免费开源构建工具。Maven 配置在 Fuse 应用的 pom.xml 文件中定义。在构建 Fuse 项目时,默认行为是 Maven 搜索外部存储库并下载所需的工件。您可以将 Fuse Bill of Materials (BOM)的依赖项添加到 pom.xml 文件中,以便 Maven 构建过程获取正确的 Fuse 支持的工件集合。
以下小节提供了有关 Maven 依赖项的信息,以及如何在 Fuse 项目中更新它们。
3.1. Camel 迁移注意事项
红帽 Fuse 使用 Apache Camel 2.23。升级到 Fuse 7.8 时,您应该考虑对 Camel 2.22 和 2.23 的以下更新。
Camel 2.22 更新
- Camel 从 Spring Boot v1 升级到 v2,因此不再支持 v1。
- 升级到 Spring Framework 5。Camel 应该与 Spring 4.3.x 一起工作,但在未来的 Spring 5.x 将会是最低的 Spring 版本。
- 升级到 Karaf 4.2。您可以在 Karaf 4.1 上运行 Camel,但我们在此版本中仅正式支持 Karaf 4.2。
- 使用 toD DSL 优化,以将端点和制作者重新用于组件。例如,基于 HTTP 的组件现在将利用动态 URI 发送到同一主机的生成者(HTTP 客户端)。
- 现在,可以配置具有 read-lock idempotent/idempotent-changed 的 File2 使用者,以延迟发行任务,以便在文件被视为进程中时扩展窗口,这可用于具有共享的幂等存储库的 active/active 集群设置,以确保其他节点没有太快地将已处理的文件作为文件(如果您有 readLockRemoveOnCommit=true 时才需要)。
- 允许以 request/reply 模式在 Netty4 producer 上插件自定义请求/回复 ID 管理器实现。Twitter 组件现在默认使用扩展模式来支持大于 140 个字符的 tweets
- REST DSL 生成者现在支持使用 endpointProperties 在 REST 配置中配置。
- Kafka 组件现在支持 HeaderFilterStrategy 来插件自定义实现,以控制 Camel 和 Kafka 信息之间的标头映射。
- REST DSL 现在支持客户端请求验证 REST 服务是否可以验证 Content-Type/Accept 标头。
- Camel 现在有一个 Service Registry SPI,它允许您使用 Camel 实现或 Spring Cloud 将路由注册到服务 registry (如 consul、etcd 或 zookeeper)。
- SEDA 组件现在的默认队列大小为 1000,而不是无限。
以下值得注意的问题已被修复:
- 修复了带有 camel-cxf 消费者的 CXF 持续超时问题,可能会导致消费者返回带有数据的响应,而不是触发调用 SOAP 客户端的超时。
- 修复了 camel-cxf 消费者在使用强大的单向操作时不会发布 UoW。
- 修复了使用 AdviceWith 并使用 weave 方法 onException 等问题。
- 修复了并行处理和流模式中的 Splitter 可能会阻止,当迭代消息正文时,第一次调用 next ()方法调用时,迭代消息正文。
- 修复了 Kafka 消费者,如果 autoCommitEnable=false,则不会自动提交。
- 修复了文件消费者默认使用 markerFile 作为 read-lock,它应该没有。
- 修复了使用带有 Kafka 的手动提交的问题,以提供当前的记录偏移,而不是之前(第一个为 -1)。
- 修复了 Java DSL 中基于内容的路由路由器,可能无法解析 predicates 中的属性占位符。
Camel 2.23 更新
- 升级到 Spring Boot 2.1。
- 现在,可以使用 spring-boot 自动配置来配置额外的组件级别选项。这些选项包含在 spring-boot 组件元数据 JSON 文件描述符中,以获得工具协助。
- 添加了一个文档部分,其中包含所有组件、数据格式和语言的所有 Spring Boot auto 配置选项。
-
所有 Camel Spring Boot starter JAR 现在在其 JAR 中包含
META-INF/spring-autoconfigure-metadata.properties文件,以优化 Spring Boot 自动配置。 - Throttler 现在支持基于动态表达式的关联组,以便您可以将消息分组到不同的节流集合中。
- Hystrix EIP 现在允许继承 Camel 的错误处理程序,以便在启用了带有 redeliveries 的错误处理时再次重试整个 Hystrix EIP 块。
- SQL 和 ElSql 用户现在支持路由表单中的动态查询参数。请注意,这个功能仅限于使用简单表达式调用 Bean。
- swagger-restdsl maven 插件现在支持从 Swagger 规格文件生成 DTO 模型类。
以下值得注意的问题已被修复:
- 修正了 Aggregator2,不会传播控制标头以强制完成所有组,因此如果其他聚合器 EIP 在路由过程中正在使用另一个聚合器 EIP,则不会再次发生。
- 修复了在错误处理程序中重新传送被激活时的 Tracer 无法正常工作。
- XML 文档的内置类型转换器可能会将错误输出到 stdout,现在它已被修复为使用日志记录 API 的输出。
- 修复了当消息正文基于流处理时,使用 charset 选项编写文件的 SFTP 无法正常工作。
- 修复了当在多个路由路由时不会重复使用的 Zipkin root id,将它们分组到一个父 span 中。
- 修复了在主机名包含带有数字的 IP 地址时,使用 HTTP 端点进行优化的问题。
- 修复了在临时队列中带有请求/回复的 RabbitMQ 的问题,并使用手动确认模式。它不会确认临时队列(需要进行请求/回复)。
- 修复了各种 HTTP 消费者组件,它们可能无法在 Allow header for OPTIONS 请求(比如使用 rest-dsl 时)返回所有允许的 HTTP 动词。
- 修复了 FluentProducerTemplate 的 thread-safety 问题。
3.2. 关于 Maven 依赖项
Maven Bill of Materials (BOM) 文件的目的是提供一组策展的 Maven 依赖项版本,这些版本可以很好地协同工作,从而为您为每个 Maven 工件单独定义版本。
每个容器都有一个专用的 BOM 文件,在其中运行 Fuse。
您可以在此处找到这些 BOM 文件: https://github.com/jboss-fuse/redhat-fuse。或者,访问有关 BOM 文件更新的信息 的最新发行注记。
Fuse BOM 提供以下优点:
-
定义 Maven 依赖项的版本,以便在将依赖项添加到
pom.xml文件时不需要指定版本。 - 定义一组对特定版本的 Fuse 经过全面测试并支持的策展依赖关系。
- 简化 Fuse 的升级。
红帽仅支持由 Fuse BOM 定义的一组依赖项。
3.3. 更新 Fuse 项目的 Maven 依赖项
要升级 Spring Boot 的 Fuse 应用程序,请更新项目的 Maven 依赖项。
流程
-
打开项目的
pom.xml文件。 在项目的
pom.xml文件中添加 dependenciesManagement元素(或者,可能在父pom.xml文件中),如下例所示:<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project ...> ... <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- configure the versions you want to use here --> <fuse.version>7.8.0.fuse-sb2-780038-redhat-00001</fuse.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.redhat-fuse</groupId> <artifactId>fuse-springboot-bom</artifactId> <version>${fuse.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ... </project>注意确保也更新您的 Spring Boot 版本。这通常位于
pom.xml文件中的 Fuse 版本下:<properties> <!-- configure the versions you want to use here --> <fuse.version>7.8.0.fuse-sb2-780038-redhat-00001</fuse.version> <spring-boot.version>2.3.4.RELEASE</spring-boot.version> </properties>-
保存
pom.xml文件。
在将 BOM 指定为 pom.xml 文件中的依赖项后,可以在没有指定工件版本 的情况下将 Maven 依赖项添加到 pom.xml 文件中。例如,要为 camel-velocity 组件添加依赖项,您可以在 pom.xml 文件中的 dependencies 元素中添加以下 XML 片段:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-velocity</artifactId> <scope>provided</scope> </dependency>
注意如何在这个依赖项定义中省略 version 元素。
第 4 章 在 JBoss EAP 独立上升级 Fuse 应用程序
在 JBoss EAP 上升级 Fuse 应用程序:
- 您应该考虑 Apache Camel 更新,如 第 4.1 节 “Camel 迁移注意事项” 所述。
您必须更新 Fuse 项目的 Maven 依赖项,以确保您使用正确的 Fuse 版本。
通常,您可以使用 Maven 构建 Fuse 应用程序。Maven 是 Apache 的免费开源构建工具。Maven 配置在 Fuse 应用的
pom.xml文件中定义。在构建 Fuse 项目时,默认行为是 Maven 搜索外部存储库并下载所需的工件。您可以将 Fuse Bill of Materials (BOM)的依赖项添加到pom.xml文件中,以便 Maven 构建过程获取正确的 Fuse 支持的工件集合。以下小节提供了有关 Maven 依赖项的信息,以及如何在 Fuse 项目中更新它们。
- 您必须更新 Fuse 项目的 Maven 依赖项,以确保您使用 Java EE 依赖项的升级版本,如 第 4.4 节 “升级 Java EE 依赖项” 所述。
4.1. Camel 迁移注意事项
红帽 Fuse 使用 Apache Camel 2.23。升级到 Fuse 7.8 时,您应该考虑对 Camel 2.22 和 2.23 的以下更新。
Camel 2.22 更新
- Camel 从 Spring Boot v1 升级到 v2,因此不再支持 v1。
- 升级到 Spring Framework 5。Camel 应该与 Spring 4.3.x 一起工作,但在未来的 Spring 5.x 将会是最低的 Spring 版本。
- 升级到 Karaf 4.2。您可以在 Karaf 4.1 上运行 Camel,但我们在此版本中仅正式支持 Karaf 4.2。
- 使用 toD DSL 优化,以将端点和制作者重新用于组件。例如,基于 HTTP 的组件现在将利用动态 URI 发送到同一主机的生成者(HTTP 客户端)。
- 现在,可以配置具有 read-lock idempotent/idempotent-changed 的 File2 使用者,以延迟发行任务,以便在文件被视为进程中时扩展窗口,这可用于具有共享的幂等存储库的 active/active 集群设置,以确保其他节点没有太快地将已处理的文件作为文件(如果您有 readLockRemoveOnCommit=true 时才需要)。
- 允许以 request/reply 模式在 Netty4 producer 上插件自定义请求/回复 ID 管理器实现。Twitter 组件现在默认使用扩展模式来支持大于 140 个字符的 tweets
- REST DSL 生成者现在支持使用 endpointProperties 在 REST 配置中配置。
- Kafka 组件现在支持 HeaderFilterStrategy 来插件自定义实现,以控制 Camel 和 Kafka 信息之间的标头映射。
- REST DSL 现在支持客户端请求验证 REST 服务是否可以验证 Content-Type/Accept 标头。
- Camel 现在有一个 Service Registry SPI,它允许您使用 Camel 实现或 Spring Cloud 将路由注册到服务 registry (如 consul、etcd 或 zookeeper)。
- SEDA 组件现在的默认队列大小为 1000,而不是无限。
以下值得注意的问题已被修复:
- 修复了带有 camel-cxf 消费者的 CXF 持续超时问题,可能会导致消费者返回带有数据的响应,而不是触发调用 SOAP 客户端的超时。
- 修复了 camel-cxf 消费者在使用强大的单向操作时不会发布 UoW。
- 修复了使用 AdviceWith 并使用 weave 方法 onException 等问题。
- 修复了并行处理和流模式中的 Splitter 可能会阻止,当迭代消息正文时,第一次调用 next ()方法调用时,迭代消息正文。
- 修复了 Kafka 消费者,如果 autoCommitEnable=false,则不会自动提交。
- 修复了文件消费者默认使用 markerFile 作为 read-lock,它应该没有。
- 修复了使用带有 Kafka 的手动提交的问题,以提供当前的记录偏移,而不是之前(第一个为 -1)。
- 修复了 Java DSL 中基于内容的路由路由器,可能无法解析 predicates 中的属性占位符。
Camel 2.23 更新
- 升级到 Spring Boot 2.1。
- 现在,可以使用 spring-boot 自动配置来配置额外的组件级别选项。这些选项包含在 spring-boot 组件元数据 JSON 文件描述符中,以获得工具协助。
- 添加了一个文档部分,其中包含所有组件、数据格式和语言的所有 Spring Boot auto 配置选项。
-
所有 Camel Spring Boot starter JAR 现在在其 JAR 中包含
META-INF/spring-autoconfigure-metadata.properties文件,以优化 Spring Boot 自动配置。 - Throttler 现在支持基于动态表达式的关联组,以便您可以将消息分组到不同的节流集合中。
- Hystrix EIP 现在允许继承 Camel 的错误处理程序,以便在启用了带有 redeliveries 的错误处理时再次重试整个 Hystrix EIP 块。
- SQL 和 ElSql 用户现在支持路由表单中的动态查询参数。请注意,这个功能仅限于使用简单表达式调用 Bean。
- swagger-restdsl maven 插件现在支持从 Swagger 规格文件生成 DTO 模型类。
以下值得注意的问题已被修复:
- 修正了 Aggregator2,不会传播控制标头以强制完成所有组,因此如果其他聚合器 EIP 在路由过程中正在使用另一个聚合器 EIP,则不会再次发生。
- 修复了在错误处理程序中重新传送被激活时的 Tracer 无法正常工作。
- XML 文档的内置类型转换器可能会将错误输出到 stdout,现在它已被修复为使用日志记录 API 的输出。
- 修复了当消息正文基于流处理时,使用 charset 选项编写文件的 SFTP 无法正常工作。
- 修复了当在多个路由路由时不会重复使用的 Zipkin root id,将它们分组到一个父 span 中。
- 修复了在主机名包含带有数字的 IP 地址时,使用 HTTP 端点进行优化的问题。
- 修复了在临时队列中带有请求/回复的 RabbitMQ 的问题,并使用手动确认模式。它不会确认临时队列(需要进行请求/回复)。
- 修复了各种 HTTP 消费者组件,它们可能无法在 Allow header for OPTIONS 请求(比如使用 rest-dsl 时)返回所有允许的 HTTP 动词。
- 修复了 FluentProducerTemplate 的 thread-safety 问题。
4.2. 关于 Maven 依赖项
Maven Bill of Materials (BOM) 文件的目的是提供一组策展的 Maven 依赖项版本,这些版本可以很好地协同工作,从而为您为每个 Maven 工件单独定义版本。
每个容器都有一个专用的 BOM 文件,在其中运行 Fuse。
您可以在此处找到这些 BOM 文件: https://github.com/jboss-fuse/redhat-fuse。或者,访问有关 BOM 文件更新的信息 的最新发行注记。
Fuse BOM 提供以下优点:
-
定义 Maven 依赖项的版本,以便在将依赖项添加到
pom.xml文件时不需要指定版本。 - 定义一组对特定版本的 Fuse 经过全面测试并支持的策展依赖关系。
- 简化 Fuse 的升级。
红帽仅支持由 Fuse BOM 定义的一组依赖项。
4.3. 更新 Fuse 项目的 Maven 依赖项
若要升级用于 JBoss EAP 的 Fuse 应用,请更新项目的 Maven 依赖项。
流程
-
打开项目的
pom.xml文件。 在项目的
pom.xml文件中添加 dependenciesManagement元素(或者,可能在父pom.xml文件中),如下例所示:<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project ...> ... <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- configure the versions you want to use here --> <fuse.version>7.8.0.fuse-sb2-780038-redhat-00001</fuse.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.redhat-fuse</groupId> <artifactId>fuse-eap-bom</artifactId> <version>${fuse.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ... </project>-
保存
pom.xml文件。
在将 BOM 指定为 pom.xml 文件中的依赖项后,可以在没有指定工件版本 的情况下将 Maven 依赖项添加到 pom.xml 文件中。例如,要为 camel-velocity 组件添加依赖项,您可以在 pom.xml 文件中的 dependencies 元素中添加以下 XML 片段:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-velocity</artifactId> <scope>provided</scope> </dependency>
注意如何在这个依赖项定义中省略 version 元素。
4.4. 升级 Java EE 依赖项
在 Fuse 7.8 中,BOM 文件中的一些受管依赖项具有更新的 groupId 或 artifactId 属性,因此您必须相应地更新项目的 pom.xml 文件。
流程
-
打开项目的
pom.xml文件。 要将
org.jboss.spec.javax.transaction版本从 1.2 改为 1.3,将org.jboss.spec.javax.servlet版本从 3.1 改为 4.0,如下例所示:<dependency> <groupId>org.jboss.spec.javax.transaction</groupId> <artifactId>jboss-transaction-api_1.3_spec</artifactId> </dependency> <dependency> <groupId>org.jboss.spec.javax.servlet</groupId> <artifactId>jboss-servlet-api_4.0_spec</artifactId> </dependency>要从 Java EE API 迁移到 Jakarta EE,请为每个
groupId替换javaxTOTP 替换为jakartaprerequisites,并修改各个依赖项的artifactId,如下例所示:<dependency> <groupId>jakarta.validation</groupId> <artifactId>jakarta.validation-api</artifactId> </dependency> <dependency> <groupId>jakarta.enterprise</groupId> <artifactId>jakarta.enterprise.cdi-api</artifactId> </dependency> <dependency> <groupId>jakarta.inject</groupId> <artifactId>jakarta.inject-api</artifactId> </dependency>
4.5. 在 JBoss EAP 安装中升级现有 Fuse
以下流程描述了如何在 JBoss EAP 安装中升级现有 Fuse。
流程
- 要从一个 JBoss EAP 次版本升级到另一个版本,您应该按照 JBoss EAP 补丁和升级指南 中的说明进行操作。
- 要更新 Fuse,您必须在 JBoss EAP 安装程序上运行 Fuse,如在 JBoss EAP 上安装 指南所述。
您不需要重新编译或重做 Fuse 应用程序。
4.6. 同时升级 Fuse 和 JBoss EAP
以下流程描述了如何将 Fuse 安装和 JBoss EAP 运行时升级,例如,如果您是从 JBoss EAP 7.2 上的 Fuse 7.7 迁移到 JBoss EAP 7.3 上的 Fuse 7.8。
在升级 Fuse 和 JBoss EAP 运行时,红帽建议您对 Fuse 和 JBoss EAP 运行时执行全新安装。
流程
- 要执行 JBoss EAP 运行时的新安装,请按照在 JBoss EAP 上安装 指南中的说明进行操作。
- 要执行 Fuse 的新安装,请在 JBoss EAP 安装程序上运行 Fuse,如 在 JBoss EAP 指南中的安装 所述。
第 5 章 在 Karaf 独立升级 Fuse 应用程序
要在 Karaf 上升级 Fuse 应用程序:
- 您应该考虑 Apache Camel 更新,如 第 5.1 节 “Camel 迁移注意事项” 所述。
- 您必须更新 Fuse 项目的 Maven 依赖项,以确保您使用正确的 Fuse 版本。
通常,您可以使用 Maven 构建 Fuse 应用程序。Maven 是 Apache 的免费开源构建工具。Maven 配置在 Fuse 应用的 pom.xml 文件中定义。在构建 Fuse 项目时,默认行为是 Maven 搜索外部存储库并下载所需的工件。您可以将 Fuse Bill of Materials (BOM)的依赖项添加到 pom.xml 文件中,以便 Maven 构建过程获取正确的 Fuse 支持的工件集合。
以下小节提供了有关 Maven 依赖项的信息,以及如何在 Fuse 项目中更新它们。
5.1. Camel 迁移注意事项
红帽 Fuse 使用 Apache Camel 2.23。升级到 Fuse 7.8 时,您应该考虑对 Camel 2.22 和 2.23 的以下更新。
Camel 2.22 更新
- Camel 从 Spring Boot v1 升级到 v2,因此不再支持 v1。
- 升级到 Spring Framework 5。Camel 应该与 Spring 4.3.x 一起工作,但在未来的 Spring 5.x 将会是最低的 Spring 版本。
- 升级到 Karaf 4.2。您可以在 Karaf 4.1 上运行 Camel,但我们在此版本中仅正式支持 Karaf 4.2。
- 使用 toD DSL 优化,以将端点和制作者重新用于组件。例如,基于 HTTP 的组件现在将利用动态 URI 发送到同一主机的生成者(HTTP 客户端)。
- 现在,可以配置具有 read-lock idempotent/idempotent-changed 的 File2 使用者,以延迟发行任务,以便在文件被视为进程中时扩展窗口,这可用于具有共享的幂等存储库的 active/active 集群设置,以确保其他节点没有太快地将已处理的文件作为文件(如果您有 readLockRemoveOnCommit=true 时才需要)。
- 允许以 request/reply 模式在 Netty4 producer 上插件自定义请求/回复 ID 管理器实现。Twitter 组件现在默认使用扩展模式来支持大于 140 个字符的 tweets
- REST DSL 生成者现在支持使用 endpointProperties 在 REST 配置中配置。
- Kafka 组件现在支持 HeaderFilterStrategy 来插件自定义实现,以控制 Camel 和 Kafka 信息之间的标头映射。
- REST DSL 现在支持客户端请求验证 REST 服务是否可以验证 Content-Type/Accept 标头。
- Camel 现在有一个 Service Registry SPI,它允许您使用 Camel 实现或 Spring Cloud 将路由注册到服务 registry (如 consul、etcd 或 zookeeper)。
- SEDA 组件现在的默认队列大小为 1000,而不是无限。
以下值得注意的问题已被修复:
- 修复了带有 camel-cxf 消费者的 CXF 持续超时问题,可能会导致消费者返回带有数据的响应,而不是触发调用 SOAP 客户端的超时。
- 修复了 camel-cxf 消费者在使用强大的单向操作时不会发布 UoW。
- 修复了使用 AdviceWith 并使用 weave 方法 onException 等问题。
- 修复了并行处理和流模式中的 Splitter 可能会阻止,当迭代消息正文时,第一次调用 next ()方法调用时,迭代消息正文。
- 修复了 Kafka 消费者,如果 autoCommitEnable=false,则不会自动提交。
- 修复了文件消费者默认使用 markerFile 作为 read-lock,它应该没有。
- 修复了使用带有 Kafka 的手动提交的问题,以提供当前的记录偏移,而不是之前(第一个为 -1)。
- 修复了 Java DSL 中基于内容的路由路由器,可能无法解析 predicates 中的属性占位符。
Camel 2.23 更新
- 升级到 Spring Boot 2.1。
- 现在,可以使用 spring-boot 自动配置来配置额外的组件级别选项。这些选项包含在 spring-boot 组件元数据 JSON 文件描述符中,以获得工具协助。
- 添加了一个文档部分,其中包含所有组件、数据格式和语言的所有 Spring Boot auto 配置选项。
-
所有 Camel Spring Boot starter JAR 现在在其 JAR 中包含
META-INF/spring-autoconfigure-metadata.properties文件,以优化 Spring Boot 自动配置。 - Throttler 现在支持基于动态表达式的关联组,以便您可以将消息分组到不同的节流集合中。
- Hystrix EIP 现在允许继承 Camel 的错误处理程序,以便在启用了带有 redeliveries 的错误处理时再次重试整个 Hystrix EIP 块。
- SQL 和 ElSql 用户现在支持路由表单中的动态查询参数。请注意,这个功能仅限于使用简单表达式调用 Bean。
- swagger-restdsl maven 插件现在支持从 Swagger 规格文件生成 DTO 模型类。
以下值得注意的问题已被修复:
- 修正了 Aggregator2,不会传播控制标头以强制完成所有组,因此如果其他聚合器 EIP 在路由过程中正在使用另一个聚合器 EIP,则不会再次发生。
- 修复了在错误处理程序中重新传送被激活时的 Tracer 无法正常工作。
- XML 文档的内置类型转换器可能会将错误输出到 stdout,现在它已被修复为使用日志记录 API 的输出。
- 修复了当消息正文基于流处理时,使用 charset 选项编写文件的 SFTP 无法正常工作。
- 修复了当在多个路由路由时不会重复使用的 Zipkin root id,将它们分组到一个父 span 中。
- 修复了在主机名包含带有数字的 IP 地址时,使用 HTTP 端点进行优化的问题。
- 修复了在临时队列中带有请求/回复的 RabbitMQ 的问题,并使用手动确认模式。它不会确认临时队列(需要进行请求/回复)。
- 修复了各种 HTTP 消费者组件,它们可能无法在 Allow header for OPTIONS 请求(比如使用 rest-dsl 时)返回所有允许的 HTTP 动词。
- 修复了 FluentProducerTemplate 的 thread-safety 问题。
5.2. 关于 Maven 依赖项
Maven Bill of Materials (BOM) 文件的目的是提供一组策展的 Maven 依赖项版本,这些版本可以很好地协同工作,从而为您为每个 Maven 工件单独定义版本。
每个容器都有一个专用的 BOM 文件,在其中运行 Fuse。
您可以在此处找到这些 BOM 文件: https://github.com/jboss-fuse/redhat-fuse。或者,访问有关 BOM 文件更新的信息 的最新发行注记。
Fuse BOM 提供以下优点:
-
定义 Maven 依赖项的版本,以便在将依赖项添加到
pom.xml文件时不需要指定版本。 - 定义一组对特定版本的 Fuse 经过全面测试并支持的策展依赖关系。
- 简化 Fuse 的升级。
红帽仅支持由 Fuse BOM 定义的一组依赖项。
5.3. 更新 Fuse 项目的 Maven 依赖项
若要升级用于 Karaf 的 Fuse 应用,请更新项目的 Maven 依赖项。
流程
-
打开项目的
pom.xml文件。 在项目的
pom.xml文件中添加 dependenciesManagement元素(或者,可能在父pom.xml文件中),如下例所示:<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project ...> ... <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- configure the versions you want to use here --> <fuse.version>7.8.0.fuse-sb2-780038-redhat-00001</fuse.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.redhat-fuse</groupId> <artifactId>fuse-karaf-bom</artifactId> <version>${fuse.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ... </project>-
保存
pom.xml文件。
在将 BOM 指定为 pom.xml 文件中的依赖项后,可以在没有指定工件版本 的情况下将 Maven 依赖项添加到 pom.xml 文件中。例如,要为 camel-velocity 组件添加依赖项,您可以在 pom.xml 文件中的 dependencies 元素中添加以下 XML 片段:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-velocity</artifactId> <scope>provided</scope> </dependency>
注意如何在这个依赖项定义中省略 version 元素。
第 6 章 在 Karaf 上升级 Fuse Standalone
在这个发行版本中,有很多影响主版本和次版本的升级。大多数 OSGi 捆绑包设置版本范围,它们不包括下一个主版本,甚至是次版本。
不要使用 Apache Karaf 补丁机制上的 Fuse 将 Apache Karaf 容器升级到 Fuse 7.8,必须执行一个新的安装,配置以及手动复制的其他修改文件。
6.1. 在 Karaf 上升级 Fuse Standalone
以下说明指导您在 Apache Karaf 上升级到 Fuse 7.8。
流程
- 要在 Apache Karaf 上安装 Fuse,请按照 在 Apache Karaf 上安装 中的步骤操作。
- 使用新的 Fuse Karaf BOM for Fuse 7.8 重建应用程序(请参阅有关 BOM 文件更新的最新 发行注记 )。
- 安装之前在 Fuse 7.7 中安装的功能
-
比较
etc目录以了解潜在的配置更改,如日志记录、Web或Maven。 -
比较
bin目录以了解潜在的环境更改,例如bin/setenv。 - 将重建的应用程序安装到 Fuse 7.8 中
升级后,在重启容器时,您将在 Welcome banner 中看到新版本和构建号。