第 6 章 在 JBoss EAP 独立升级 Fuse 应用程序

在 JBoss EAP 上升级您的 Fuse 应用程序:

  • 您应该考虑 Apache Camel 更新,如 第 6.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 依赖项的升级版本,如 第 6.4 节 “升级 Java EE 依赖项” 所述。

6.1. Camel 迁移注意事项

使用 MongoClients factory 创建到 MongoDB 的连接

从 Fuse 7.11,使用 com.mongodb.client.MongoClient 而不是 com.mongodb.MongoClient 创建与 MongoDB 的连接(请注意完整路径中的额外 .client 子软件包)。

如果任何现有 Fuse 应用程序使用 camel-mongodb 组件,您必须:

  • 更新应用程序,以将连接 bean 创建为 com.mongodb.client.MongoClient 实例。

    例如,创建与 MongoDB 的连接,如下所示:

    import com.mongodb.client.MongoClient;

    然后您可以创建 MongoClient bean,如下例所示:

    return MongoClients.create("mongodb://admin:password@192.168.99.102:32553");
  • 评估并根据需要重构与 MongoClient 类公开的方法相关的代码。

Camel 2.23

红帽 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 的最低版本。
  • 升级至 Karaf 4.2。您可以在 Karaf 4.1 上运行 Camel,但在此版本中,我们只正式支持 Karaf 4.2。
  • 使用 toD DSL 优化为可能的组件重复使用端点和制作者。例如,基于 HTTP 的组件现在将重复使用带有发送到同一主机的动态 URI 的生产者(HTTP 客户端)。
  • 现在,可将具有 read-lock idempotent/idempotent-changed 的 file2 使用者配置为延迟发行任务,以在文件视为进程中时(仅在有共享幂等库的主动/主动集群设置中使用)。
  • 允许在请求/reply 模式的 Netty4 producer 上插件自定义请求/关系 id 管理器实施。Twitter 组件现在默认使用扩展模式来支持超过 140 个字符的调整
  • 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 consumer 的 CXF continuation 超时问题,这可能会导致使用者返回带有数据的响应,而不是触发调用 SOAP 客户端的超时问题。
    • 修复了 camel-cxf consumer在使用强健的单向操作时不会发布 UoW。
    • 修复了使用 AdviceWith 以及在Exception 上使用 usave 方法等问题。
    • 修复了并行处理和流传输模式中的 Splitter 可能会阻断,当迭代邮件正文时,迭代邮件正文在第一个调用的 next()方法调用中引发异常。
    • 修复了 Kafka 用户,在 autoCommitEnable=false 时不自动提交。
    • 固定的文件消费者使用标记文件(默认情况下为 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 JARs 都会在其 JARs 中包括 META-INF/spring-autoconfigure-metadata.properties 文件,以优化 Spring Boot 自动配置。
  • Throttler 现在支持基于动态表达式的关联组,以便您可以将消息分组到不同的 throttled 集。
  • Hystrix EIP 现在允许 Camel 的错误处理程序继承,如果已使用红色类别启用了错误处理,您可以再次重试整个 Hystrix EIP 块。
  • SQL 和 ElSql 使用者现在支持路由形式的动态查询参数。请注意,此功能可通过使用简单表达式调用 Bean。
  • swagger-restdsl maven 插件现在支持从 Swagger 规格文件中生成 DTO 模型类。
  • 以下值得注意的问题已被修复:

    • 修正了聚合器2,不会传播控制标头以强制完成所有组,因此以后路由过程中使用了另一个聚合器 EIP 时,它不会再次发生。
    • 修复了当错误处理器中重新发送被激活时的 Tracer 无法正常工作。
    • XML 文档的内置类型转换器可能会输出将错误解析到 stdout,该错误现在使用日志记录 API 固定为输出。
    • 修复了在基于消息正文时,使用 charset 选项的 SFTP 写入文件将无法正常工作。
    • 修复了当在多个路由之间进行路由时,Zipkin root id 不会被重复使用,从而将它们分组到一个父范围中。
    • 修复了在使用 HTTP 端点时,当主机名包含带有数字的 IP 地址时,被优化为D。
    • 修复了 RabbitMQ 与请求/回复超过临时队列的 RabbitMQ 的问题,并使用手动确认模式。它不会确认临时队列(需要可以发出请求/恢复)。
    • 修复了各种 HTTP 消费者组件,它们可能无法在 Allow header 中为 OPTIONS 请求返回所有允许的 HTTP 动词(比如使用 rest-dsl)。
    • 修复了 FluentProducerTemplate 中的 thread-safety 问题。