1.2. 迁移到 Apache Camel 4


本节提供了可帮助您将 Apache Camel 应用程序从版本 3.20 或更高版本迁移到 4.0 的信息。

注意

有关单个版本的详情,请参考:

有关如何升级 Apache Camel Quarkus 的详情,请参考:

1.2.1. Java 版本

Apache Camel 4 支持 Java 17。丢弃了对 Java 11 的支持。

1.2.2. 删除的组件

以下组件已被删除:

组件备用组件

camel-any23

none

camel-atlasmap

none

camel-atmos

none

camel-caffeine-lrucache

camel-cache, camel-ignite, camel-infinispan

camel-cdi

camel-spring-boot, camel-quarkus

camel-corda

none

camel-directvm

camel-direct

camel-dozer

camel-mapstruct

camel-elasticsearch-rest

camel-elasticsearch

camel-gora

none

camel-hbase

none

camel-hyperledger-aries

none

camel-iota

none

camel-ipfs

none

camel-jbpm

none

camel-jclouds

none

camel-johnzon

camel-jackson, camel-fastjson, camel-gson

camel-microprofile-metrics

camel-micrometer, camel-opentelemetry

camel-milo

none

camel-opentracing

camel-micrometer, camel-opentelemetry

camel-rabbitmq

spring-rabbitmq-component

camel-rest-swagger

camel-openapi-rest

camel-restdsl-swagger-plugin

camel-restdsl-openapi-plugin

camel-resteasy

camel-cxf, camel-rest

camel-solr

none

camel-spark

none

camel-spring-integration

none

camel-swagger-java

camel-openapi-java

camel-websocket

camel-vertx-websocket

camel-websocket-jsr356

camel-vertx-websocket

camel-vertx-kafka

camel-kafka

camel-vm

camel-seda

camel-weka

none

camel-xstream

camel-jacksonxml

camel-zipkin

camel-micrometer, camel-opentelemetry

1.2.3. 日志记录

Camel 4 已将日志记录 facade API slf4j-api 从 1.7 升级到 2.0。

1.2.4. JUnit 4

所有基于 JUnit 4.x 的 camel-test 模块已被删除。现在,所有测试模块都使用 JUnit 5。

1.2.5. API 更改

以下 API 已被弃用并从版本 4 中删除:

  • org.apache.camel.ExchangePattern 已删除 InOptionalOut
  • CamelContext 中移除 getEndpointMap () 方法。
  • 删除了 @FallbackConverter,因为您应该改为使用 @Converter (fallback = true)
  • 删除了 @EndpointInject@Produce@Consume 上的 uri 属性,因为您应该改为使用 value (默认)。例如,@Produce (uri = "kafka:cheese") 应改为 @Produce ("kafka:cheese")
  • 删除了 @UriEndpoint 上的标签,因为您应该改为使用 category
  • 删除了 ProducerTemplate 中的所有 asyncCallback 方法。改为使用 asyncSendasyncRequest
  • Removed org.apache.camel.spi.OnCamelContextStart.Use org.apache.camel.spi.OnCamelContextStarting instead.
  • Removed org.apache.camel.spi.OnCamelContextStop.Use org.apache.camel.spi.OnCamelContextStopping instead.
  • org.apache.camel.ExtendedCamelContextorg.apache.camel.CamelContext 分离。
  • org.apache.camel.CamelContext 中的 adapt () 替换为 getCamelContextExtension
  • org.apache.camel.ExtendedExchangeorg.apache.camel.Exchange 分离。
  • org.apache.camel.ExtendedExchange 中的 adapt () 替换为 getExchangeExtension
  • Exchange failure 处理状态已从定义为 ExchangePropertyKey.FAILURE_HANDLED 的属性移到 ExtendedExchange 的成员,可以通过 'isFailureHandled ()'method 访问。
  • org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy 中删除 DiscardDiscardOldest
  • 删除了 org.apache.camel.builder.SimpleBuilder。在一些情况下,主要在 Camel 中与 Java DSL 进行内部使用。
  • org.apache.camel.support.IntrospectionSupport 移到 camel-core-engine 仅用于内部使用。最终用户应使用 org.apache.camel.spi.BeanInspection 替代。
  • org.apache.camel.catalog.CamelCatalog 删除了 archetypeCatalogAsXml 方法。
  • org.apache.camel.health.HealthCheck 方法是Liveness,现在默认为 false,而不是 true
  • org.apache.camel.StreamCache 添加了 位置 方法。
  • 从接口 org.apache.camel.main.Listener 配置 的方法已被删除
  • org.apache.camel.support.EventNotifierSupport abstract 类现在实现了 CamelContextAware
  • CamelContext 上的 dumpRoutes 类型已从 boolean 改为 String,以允许指定 xml 或 yaml。
注意

org.apache.camel.support.PluginHelper 可让您轻松访问各种扩展和上下文插件,之前在 CamelContext 中直接从 CamelContext 中提供。

1.2.6. EIP 更改

  • 删除了每个 EIP 上 &lt ;description> 的 lang 属性。
  • InOnlyInOut EIPs 已被删除。反之,使用 SetExchangePatternTo,您可以在其中指定要使用的交换模式。

1.2.6.1. poll Enrich EIP

轮询端点 URI 现在作为属性存储在 Exchange (使用键 CamelToEndpoint)上,与所有其他 EIP 一样。在 URI 存储为消息标头之前。

1.2.6.2. CircuitBreaker EIP

camel-resilience4j 中的以下选项错误地没有定义为属性:

选项

bulkheadEnabled

bulkheadMaxConcurrentCalls

bulkheadMaxWaitDuration

timeoutEnabled

timeoutExecutorService

timeoutDuration

timeoutCancelRunningFuture

这些选项没有以 YAML DSL 的形式公开,在您需要迁移的 XML DSL 中:

<circuitBreaker>
    <resilience4jConfiguration>
        <timeoutEnabled>true</timeoutEnabled>
        <timeoutDuration>2000</timeoutDuration>
    </resilience4jConfiguration>
...
</circuitBreaker>

改为使用以下属性:

<circuitBreaker>
    <resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
...
</circuitBreaker>

1.2.7. XML DSL

在路由或节点上设置描述的 <description> 已从元素改为属性。

Example

<route id="myRoute" description="Something that this route do">
  <from uri="kafka:cheese"/>
  ...
</route>

1.2.8. type Converter

String java.io.File converter 已删除。

1.2.9. Tracing

TracerBacklog Tracer 不再包含由 Rest DSL 或 route templates 或 Kamelets 创建的路由的内部追踪事件。您可以通过在 tracer 中设置 traceTemplates=true 来打开它。

Backlog Tracer 已被改进并 修复了 跟踪消息标头(也流传输类型)。这意味着,以前类型为 InputStream 的标头在之前没有被跟踪,但现在被包含。这可能意味着标头流位于末尾,之后记录标头,因为标头值为空。

1.2.10. UseOriginalMessage / UseOriginalBody

当在 OnException,OnCompletion 或 error handlers 中启用了 useOriginalMessageuseOriginalBody 时,原始消息正文会被明确复制,如果可能转换为 StreamCache,则在访问时可以重新读取正文。在以前的版本中,原始正文没有转换为 StreamCache,这可能会导致正文无法读取,或者流已被关闭。

1.2.11. Camel Health

现在,健康检查默认只是开箱即用的就绪度检查。Camel 提供了 CamelContextCheck 作为就绪度和存活度检查,因此每个开箱即用至少有一个。默认情况下,只启用基于使用者的健康检查。

1.2.11.1. 制作者健康检查

选项 camel.health.components-enabled 已重命名为 camel.health.producers-enabled

有些组件(特定 AWS)也为生成者提供了健康检查;在 Camel 3.x 中,这些健康检查无法正常工作,并在源中禁用。要在 Camel 4 中继续这一行为,禁用基于制作者的健康检查。

请注意,camel-kafka 附带了基于生成者的健康检查,在 Camel 3 中可以正常工作,因此这个更改在 Camel 4 中意味着禁用此健康检查。

您需要 全局启用制作者健康检查,如 application.properties 中:

camel.health.producers-enabled = true

1.2.12. JMX

Camel 现在还包括用于 doCatch 的 MBeans,并在处理器 MBeans 的树中进行最终 操作

ManagedChoiceMBean 已将 choiceStatistics 重命名为 extendedInformationManagedFailoverLoadBalancerMBean 已重命名为 exceptionStatistics to extendedInformation

CamelContextMBeanCamelRouteMBean 删除了方法 dumpRouteAsXml (布尔值 resolvePlaceholders,布尔值 resolveDelegateEndpoints)。

1.2.13. YAML DSL

向后兼容模式 Camel 3.14 或更早的模式,允许以子到 路由的 子步骤已被删除。

新语法为:

- route:
    from:
      uri: "direct:info"
      steps:
      - log: "message"

1.2.14. backlog Tracing

选项 backlogTracing=true 现在会自动启用,以便在启动时启动 tracer。在之前的版本中,tracer 仅适用于,之后必须手动启用。可以通过设置 backlogTracingStandby=true 来归档旧行为。

将以下类从 camel-management-api.management.mbean.BacklogTracerEventMessage 中的 org.apache.camel.spi.BacklogTracerEventMessage 移到 camel-api JAR 中的 org.apache.camel.spi.BacklogTracerEventMessage

org.apache.camel.impl.debugger.DefaultBacklogTracerEventMessage 已重构为接口 org.apache.camel.spi.BacklogTracerEventMessage,其中包含一些有关追踪消息的详情。例如,Camel 现在捕获了一个包含输入和输出(如果 InOut)消息的 第一个和最后一个 trace。

1.2.15. XML serialization

改进了使用 ModelToXMLDumper 的默认 xml 序列化功能,现在使用 camel-xml-io 模块中的生成的 xml serializer,而不是来自 camel-jaxb 的 JAXB。

1.2.16. OpenAPI Maven 插件

camel-restdsl-openapi-plugin Maven 插件现在使用 platform-http 作为生成的 Rest DSL 代码中的默认其余组件,因为它是更好的默认组件,它可用于 Quarkus。

1.2.17. 组件更改

1.2.17.1. 类别

org.apache.camel.Category 的 enums 数量已从 83 减少到 37,这意味着使用删除的值的自定义组件需要选择其中一个剩余值。我们这样做以整合 Camel 社区中所有组件的类别数。

1.2.17.2. camel-openapi-rest-dsl-generator

这个 dsl-generator 已将底层模型类(apicurio-data-models)从 1.1.27 更新至 2.0.3。

1.2.17.3. camel-atom

camel-atom 组件已将第三方 atom 客户端从 Apache Abdera 改为 RSSReader。这意味着 feed 对象已从 org.apache.abdera.model.Feed 改为 com.apptasticsoftware.rssreader.Item

1.2.17.4. camel-azure-cosmosdb

itemPartitionKey 已更新。现在,它是一个不是 PartitionKey 的 String。CAMEL-19222 中的更多详细信息。

1.2.17.5. camel-bean

当使用 method 选项引用特定方法并使用参数类型和值时,例如 :"bean:myBean?method=foo ( com.foo.MyOrder, true) ", 任何类类型必须使用 .class 语法,即 com.e.foo.MyOrder now be com.foo.MyOrder.class

Example

"bean:myBean?method=foo(com.foo.MyOrder.class, true)"

这也适用于 String, int 等 Java 类型。

"bean:myBean?method=bar(String.class, int.class)"

1.2.17.6. camel-box

从 Box Java SDK v2 升级到 v4,这有一些方法签名更改。获取文件缩略图的方法不再可用。

1.2.17.7. camel-caffeine

keyType 参数已被删除。现在,缓存的 Key 将仅为 String 类型。CAMEL-18877 中的更多信息。

1.2.17.8. camel-fhir

底层 hapi-fhir 库已从 4.2.0 升级到 6.2.4。只有 Delete API 方法已更改,现在返回 ca.uhn.fhir.rest.api.MethodOutcome 而不是 org.hl7.fhir.instance.model.api.IBaseOperationOutcome。有关底层更改的详细列表,请参阅 hapi-fhir (在 Camel 中使用 hapi-fhir 客户端)。

1.2.17.9. camel-google

基于 API 的组件 camel-google-drive,camel-google-calendar,camel-google-sheetscamel-google-mail 已从 Google Java SDK v1 升级到 v2 以及最新的 API 修订。camel-google-drivecamel-google-sheets 有一些 API 方法更改,但其他 API 方法与以前相同。

1.2.17.10. camel-http

组件已升级至使用 Apache HttpComponents v5,它对配置底层客户端的方式有影响。有 4 个不同的超时(connectionRequestTimeout,connectTimeout , so Timeout 和 responseTimeout),而不是最初 3 (connectionRequestTimeout,connectTimeoutsocketTimeout),以及其中一些的默认值已更改。详情请参考文档。

请注意,socketTimeout 已从 HttpClient 的可能配置参数中删除,改为使用 responseTimeout

最后,选项 soTimeout 以及 socket Config 中包含的任何参数(需要以 httpConnection 前缀)作为前缀,包括在 HttpClientBuilderRequestConfig 中定义的参数的其余部分需要以 httpClient. 前缀。

1.2.17.11. camel-http-common

org.apache.camel.http.common.HttpBinding 中的 API 已被更改为更易重复利用。parseBody 方法现在在 HttpServletRequest 中取为输入参数。并且所有 HttpMessage 都已更改为通用 消息类型

1.2.17.12. camel-kubernetes

io.fabric8:kubernetes-client 库已被升级,一些已弃用的 API 用量已被删除。之前带有 replace 前缀的操作现在带有 update 前缀。

例如,replaceConfigMap 现在是 updateConfigMapreplacePod 现在是 updatePod 等。类 KubernetesOperations 中对应的常量也被重命名。REPLACE_CONFIGMAP_OPERATION 现在是 UPDATE_CONFIGMAP_OPERATIONREPLACE_POD_OPERATION 现在是 UPDATE_POD_OPERATION 等。

1.2.17.13. camel-web3j

camel-web3j 将 web3j JAR 从 3.x 升级到 5.0,它有很多 API 更改,因此不再提供一些之前的 API 调用。

1.2.17.14. camel-main

以下常量已从 BaseMainSupport / MainConstants 移到 Main Constants

旧名称新名称

Main.DEFAULT_PROPERTY_PLACEHOLDER_LOCATION

MainConstants.DEFAULT_PROPERTY_PLACEHOLDER_LOCATION

Main.INITIAL_PROPERTIES_LOCATION

MainConstants.INITIAL_PROPERTIES_LOCATION

Main.OVERRIDE_PROPERTIES_LOCATION

MainConstants.OVERRIDE_PROPERTIES_LOCATION

Main.PROPERTY_PLACEHOLDER_LOCATION

MainConstants.PROPERTY_PLACEHOLDER_LOCATION

1.2.17.15. camel-micrometer

指标已重命名为遵循 Micrometer 命名约定。

旧名称

新名称

CamelExchangeEventNotifier

camel.exchange.event.notifier

CamelExchangesFailed

camel.exchanges.failed

CamelExchangesFailuresHandled

camel.exchanges.failures.handled

CamelExchangesInflight

camel.exchanges.external.redeliveries

CamelExchangesSucceeded

camel.exchanges.succeeded

CamelExchangesTotal

camel.exchanges.total

CamelMessageHistory

camel.message.history

CamelRoutePolicy

camel.route.policy

CamelRoutePolicyLongTask

camel.route.policy.long.task

CamelRoutesAdded

camel.routes.added

CamelRoutesRunning

camel.routes.running

1.2.17.16. camel-jbang

命令 camel 依赖项 已重命名为 camel 依赖项

在 Camel JBang 的 init-dir 参数中,并运行 目标已重命名为需要 2 dashes-- dir,就像所有其他选项一样。

camel stop 命令现在默认停止所有正在运行的集成( option-- all 已被删除)。

Placeholders 替换 被修改为使用 #name 而不是 $name 语法。

1.2.17.17. camel-openapi-java

camel-openapi-java 组件已改为使用 io.swagger.v3 库,而不是 io.apicurio.datamodels。因此,公共方法 org.apache.camel.openapi.RestOpenApiReader.read ()的返回类型现在为 io.swagger.v3.oas.models.OpenAPI 而不是 io.apicurio.datamodels.openapi.models.OasDocument。当解析 OpenAPI 2.0 (swagger)规格时,swagger parser 会自动升级到 OpenAPI 3.0.x。此版本还支持 OpenAPI 3.1.x 规格。

1.2.17.18. camel-optaplanner

camel-optaplanner 组件已改为使用 SolverManager。如果您在 Camel 3 中使用 SoverManager,则不再需要 Route 中的布尔值 useSolverManager。弃用的 ProblemFactChange 已被 ProblemChange 替代。

新的 URI 路径为:

from("optaplanner:myProblemName")
  .to("...")

您可以通过两种方式传递 Optaplanner SolverManager :

  • as #parameter
  • 作为标头

在 Quarkus 上运行 camel-optaplanner 时,请使用 Quarkus 方法创建 SolverManager。

您可以通过提供 XML 配置文件,迁移旧的 Camel Optaplanner 路由,它允许 Camel Optaplanner 处理为这些传统路由创建 SolverManager :

提供 Optaplanner Routes XML 配置文件

from("optaplanner:myProblemName?configFile=PATH/TO/CONFIG.FILE.xml")
  .to("...")

注意
解决守护进程解决方案应该被迁移为使用 SolverManager。

1.2.17.19. camel-platform-http-vertx

如果路由或消费者暂停,则现在返回 http 状态 503,而不是 404。

1.2.17.20. camel-salesforce

生成的 DTOs 中的 blob 字段的属性名称不再有 'Url' affixed。例如,ContentVersionUrl 属性现在是 ContentVersion

1.2.17.21. camel-slack

默认延迟(在 slack consumer 上)从 0.5s 改为 10s,以避免 Slack 通常的速率限制。

1.2.17.22. camel-micrometer-starter

uri 标签现在是静态的,而不是动态(默认),因为带有动态值的 URI 而导致潜在的标签太多。这可以通过设置 camel.metrics.uriTagDynamic=true 来再次启用。

1.2.17.23. camel-platform-http-starter

platform-http-starter 已从使用 camel-servlet 改为直接使用 HTTP 服务器。因此,所有 HTTP 端点不再带有 servlet context-path 前缀(默认为 camel)。

例如:

HTTP 端点

from("platform-http:myservice")
  .to("...")

可以使用 http://localhost:8080/myservice 调用端点,因为不使用 context-path。

注意

platform-http-starter 也可用于 Rest DSL。

如果路由或消费者暂停,则现在返回 http 状态 503,而不是 404。

1.2.17.24. camel-twitter

camel-twitter 组件已更新为使用 author4j 版本 4.1.2,它已移动了几个类所使用的 软件包。如果访问某些与 twitter 相关的数据,如 Twit 状态,您需要将 twitter4j.Status 中使用的软件包更新为 twitter4j.v1.Status

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.