将 Fuse 7 应用程序迁移到红帽构建的 Apache Camel for Quarkus
将 Fuse 7 应用程序迁移到红帽构建的 Apache Camel for Quarkus
摘要
前言 复制链接链接已复制到粘贴板!
向红帽构建的 Apache Camel 文档提供反馈
要报告错误或改进文档,请登录您的红帽 JIRA 帐户并提交问题。如果您没有红帽 JIRA 帐户,系统会提示您创建一个帐户。
流程
- 点击以下链接 创建 ticket
- 在 Summary 中输入问题的简短描述。
- 提供有关描述中问题或功能增强的详细描述。包括一个 URL,以在文档中发生问题。
- 点 Submit 创建问题并将其路由到适当的文档团队。
第 1 章 将 Fuse 7 应用程序迁移到红帽构建的 Apache Camel for Quarkus 概述 复制链接链接已复制到粘贴板!
1.1. Fuse, 红帽构建的 Apache Camel for Quarkus 和 Camel on EAP 复制链接链接已复制到粘贴板!
1.1.1. fuse 复制链接链接已复制到粘贴板!
红帽 Fuse 是基于 Apache Camel 和 Apache Karaf 等开源社区的灵活集成解决方案。红帽 Fuse 是一个轻量级、灵活的集成平台,可实现快速的内部云集成。
您可以使用三个不同的运行时运行红帽 Fuse:
- Karaf 支持 OSGi 应用程序
- Spring Boot
- JBoss EAP (企业应用平台)
1.1.2. Red Hat build of Apache Camel for Quarkus 复制链接链接已复制到粘贴板!
红帽构建的 Apache Camel for Quarkus 将 Apache Camel 的集成功能及其大量组件库引入 Quarkus 运行时。红帽构建的 Camel Quarkus 为许多 Camel 组件提供了 Quarkus 扩展。
Camel Quarkus 利用 Camel 3 中所做的很多性能改进,从而降低内存占用率,更依赖于反映,启动时间更快。
在 Red Hat build of Apache Camel for Quarkus 应用程序中,您可以使用 Java DSL 定义 Camel 路由,以便您可以将 Fuse 应用程序中使用的 Camel 路由迁移到 CEQ。
1.1.3. Camel on EAP 复制链接链接已复制到粘贴板!
Karaf 遵循 OSGI 依赖项管理概念,EAP 遵循EE 规范,即受容器化应用采用的应用服务器。
容器已逐渐成为打包应用的主要方法。因此,管理应用程序的责任包括部署、扩展、集群和负载平衡,已使用 Kubernetes 从应用服务器过渡到容器编配。
虽然 EAP 继续在 Red Hat Openshift 上支持,但 EAP 服务器上不再支持 Camel 3。因此,如果您在 EAP 服务器上运行 Fuse 7 应用程序,您应该考虑将应用程序迁移到 Apache Camel for Spring Boot 的红帽构建或红帽构建的 Apache Camel for Quarkus,并考虑迁移过程的一个重新设计,或将应用程序部分从 monolith 迁移到微服务架构。
如果不使用 Openshift,RHEL 虚拟机在为 Spring Boot 和 Quarkus 部署应用程序时仍然是有效的方法,Quarkus 也受益于其原生编译功能。评估用于支持在此类平台上管理微服务架构的工具非常重要。
红帽通过 Ansible 使用 Red Hat Ansible 进行中间件集合提供此功能。
1.2. 标准迁移路径 复制链接链接已复制到粘贴板!
1.2.1. XML 路径 复制链接链接已复制到粘贴板!
使用 Spring XML 或 Blueprint XML 编写的 Fuse 应用程序应迁移到基于 XML 的类别,并可以 Spring Boot 或 Quarkus 运行时为目标,且迁移步骤没有区别。
1.2.2. Java 路径 复制链接链接已复制到粘贴板!
使用 Java DSL 编写的 Fuse 应用程序应迁移到基于 Java 的类别,并可以 Spring Boot 或 Quarkus 运行时为目标,且迁移步骤没有区别。
1.3. 架构更改 复制链接链接已复制到粘贴板!
OpenShift 已取代 Fabric8 作为 Fuse 6 用户的运行时平台,也是 Fuse 应用迁移的建议目标。
在迁移应用程序时,您应该考虑以下架构更改:
- 如果您的 Fuse 6 应用程序依赖于 Fabric8 服务发现,则应在 OpenShift 上运行 Camel 3 时使用 Kubernetes 服务发现。
- 如果您的 Fuse 6 应用程序依赖于 OSGi 捆绑包配置,则应在 OpenShift 上运行 Camel 3 时使用 Kubernetes ConfigMap 和 Secret。
- 如果您的应用程序使用基于文件的路由定义,在 OpenShift 上运行 Camel 3 时请考虑使用 AWS S3 技术。
- 如果您的应用程序使用标准文件系统,则生成的 Spring Boot 或 Quarkus 应用程序应部署到标准 RHEL 虚拟机上,而不是 Openshift 平台。
- 将 Inbound HTTPS 连接到处理 SSL 要求的 Openshift 路由器。
- Hystrix 功能委派到 Service Mesh.
1.4. javax 到 jakarta 软件包命名空间更改 复制链接链接已复制到粘贴板!
Java EE 移至 Eclipse Foundation 和 Jakarta EE 的建立,因为用于所有 EE API 的 Jakarta EE 9 软件包已改为 jakarta …
文档中的代码片段已更新为使用 jakarta 输入命名空间,但您需要小心操作并查看您自己的应用程序。
这个更改不会影响作为 Java SE 一部分的 javax 软件包。
将应用迁移到 EE 10 时,您需要:
-
将任何导入语句或其他源代码使用来自
javax软件包中的 EE API 类更新到jakarta。 -
更改任何以
javax.开头的 EE 指定的系统属性或其他配置属性,使其以jakarta开头。 -
使用
META-INF/services/jakarta.[rest_of_name]名称格式来识别使用实施 EE 接口或通过java.util.ServiceLoader机制引导的应用程序中的实施类。
1.4.1. 迁移工具 复制链接链接已复制到粘贴板!
- 源代码迁移: 如何使用 Red Hat Migration Toolkit for Auto-Migration of Application to the Jakarta EE 10 命名空间
- bytecode 转换:对于源代码迁移不是选项的情况,开源 Eclipse Transformer
其他资源
第 2 章 将 Camel 路由从 Fuse 7 迁移到 Camel 复制链接链接已复制到粘贴板!
您可以使用 Java DSL、XML IO DSL 或 YAML 在 Red Hat build of Apache Camel for Quarkus 应用程序中定义 Camel 路由。
2.1. Java DSL 路由迁移示例 复制链接链接已复制到粘贴板!
要将 Java DSL 路由定义从 Fuse 应用程序迁移到 CEQ,您可以将现有路由定义直接复制到红帽构建的 Apache Camel for Quarkus 应用程序,并将必要的依赖项添加到 Apache Camel for Quarkus pom.xml 文件的红帽构建中。
在本例中,我们将一个基于内容的路由定义从 Fuse 7 应用迁移到一个新的 CEQ 应用,方法是将 Java DSL 路由复制到 CEQ 应用中名为 Routes.java 的文件。
流程
使用
code.quarkus.redhat.com网站,选择本例所需的扩展:- camel-quarkus-file
- camel-quarkus-xpath
进入从上一步中提取生成的项目文件的目录:
cd <directory_name>
$ cd <directory_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在
src/main/java/org/acme/子文件夹中创建名为Routes.java的文件。 将 Fuse 应用程序的路由定义添加到
Routes.java,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编译您的 CEQ 应用程序。
mvn clean compile quarkus:dev
mvn clean compile quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow
此命令编译项目、启动应用程序,并允许 Quarkus 工具监视工作区中的更改。项目中的任何修改都会在运行的应用程序中自动生效。
2.2. 蓝图 XML DSL 路由迁移 复制链接链接已复制到粘贴板!
要将蓝图 XML 路由定义从 Fuse 应用程序迁移到 CEQ,请使用 camel-quarkus-xml-io-dsl 扩展,并将 Fuse 应用程序路由定义直接复制到 CEQ 应用程序。然后,您需要将所需的依赖项添加到 CEQ pom.xml 文件中,并更新 application.properties 文件中的 CEQ 配置。
CEQ 支持 Camel 3,而 Fuse 7 支持 Camel 2。
有关在将 Red Hat Fuse 7 应用程序迁移到 CEQ 时升级 Camel 的更多信息,请参阅 迁移 Apache Camel。
有关在 Camel Quarkus 中使用 Bean 的更多信息,请参阅 带有红帽构建的 Apache Camel for Quarkus 指南中的 CDI 和 Camel Bean 组件 部分。
2.2.1. XML-IO-DSL 限制 复制链接链接已复制到粘贴板!
您可以使用 camel-quarkus-xml-io-dsl 扩展来帮助将 Blueprint XML 路由定义迁移到 CEQ。
camel-quarkus-xml-io-dsl 扩展只支持以下 < camelContext& gt; 子元素:
- routeTemplates
- templatedRoutes
- rests
- Routes
- routeConfigurations
由于 Blueprint XML 支持 camel-quarkus-xml-io-dsl 扩展不支持的其他 bean 定义,您可能需要重写蓝图 XML 路由定义中包含的其他 bean 定义。
您必须在单独的文件中定义每个元素(XML IO DSL)。例如,这是 Blueprint XML 路由定义的简化示例:
您可以使用以下文件中定义的 XML IO DSL 将此 Blueprint XML 路由定义迁移到 CEQ :
src/main/resources/routes/camel-rests.xml
src/main/resources/routes/camel-routes.xml
<routes xmlns="http://camel.apache.org/schema/spring">
<route>
<from ..../>
</route>
</routes>
<routes xmlns="http://camel.apache.org/schema/spring">
<route>
<from ..../>
</route>
</routes>
您必须使用 Java DSL 定义不支持的其他元素,如 < restConfiguration>。例如,使用 camel-rests.xml 文件中定义的路由构建器,如下所示:
src/main/resources/routes/camel-rests.xml
2.2.2. 蓝图 XML DSL 路由迁移示例 复制链接链接已复制到粘贴板!
有关使用 XML IO DSL 扩展的更多信息,请参阅 Red Hat build of Apache Camel for Quarkus Extensions 中的 XML IO DSL 文档。
在本例中,您要将基于内容的路由定义从 Fuse 应用程序迁移到新的 CEQ 应用程序,方法是将 Blueprint XML 路由定义复制到 CEQ 应用程序中名为 camel-routes.xml 的文件。
流程
使用
code.quarkus.redhat.com网站,为本例选择以下扩展:- camel-quarkus-xml-io-dsl
- camel-quarkus-file
- camel-quarkus-xpath
- 选择 Generate your application 以确认您的选择,并使用包含您生成的项目的存档的下载链接显示 overlay 屏幕。
- 选择 Download the ZIP 将生成的项目文件与生成的项目文件保存到机器中。
- 提取存档的内容。
进入从上一步中提取生成的项目文件的目录:
cd <directory_name>
$ cd <directory_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在
src/main/resources/routes/目录中创建一个名为camel-routes.xml的文件。 将以下
blueprint-example.xml示例中的 <route> 元素和子元素复制到camel-routes.xml文件中:blueprint-example.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow camel-routes.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
application.properties# Camel # camel.context.name = camel-quarkus-xml-io-dsl-example camel.main.routes-include-pattern = file:src/main/resources/routes/camel-routes.xml
# Camel # camel.context.name = camel-quarkus-xml-io-dsl-example camel.main.routes-include-pattern = file:src/main/resources/routes/camel-routes.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编译您的 CEQ 应用程序。
mvn clean compile quarkus:dev
mvn clean compile quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此命令编译项目、启动应用程序,并允许 Quarkus 工具监视工作区中的更改。项目中的任何修改都会在运行的应用程序中自动生效。