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. 删除的组件

以下组件已被删除:

Expand
组件备用组件

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.使用 org.apache.camel.spi.OnCamelContextStarting 替代。
  • Removed org.apache.camel.spi.OnCamelContextStop.使用 org.apache.camel.spi.OnCamelContextStopping 替代。
  • 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 中的以下选项错误地没有定义为属性:

Expand

选项

bulkheadEnabled

bulkheadMaxConcurrentCalls

bulkheadMaxWaitDuration

timeoutEnabled

timeoutExecutorService

timeoutDuration

timeoutCancelRunningFuture

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

<circuitBreaker>
    <resilience4jConfiguration>
        <timeoutEnabled>true</timeoutEnabled>
        <timeoutDuration>2000</timeoutDuration>
    </resilience4jConfiguration>
...
</circuitBreaker>
Copy to Clipboard Toggle word wrap

改为使用以下属性:

<circuitBreaker>
    <resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
...
</circuitBreaker>
Copy to Clipboard Toggle word wrap

1.2.7. XML DSL

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

Example

<route id="myRoute" description="Something that this route do">
  <from uri="kafka:cheese"/>
  ...
</route>
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

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"
Copy to Clipboard Toggle word wrap

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)"
Copy to Clipboard Toggle word wrap

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

"bean:myBean?method=bar(String.class, int.class)"
Copy to Clipboard Toggle word wrap

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

Expand
旧名称新名称

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 命名约定。

Expand

旧名称

新名称

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("...")
Copy to Clipboard Toggle word wrap

您可以通过两种方式传递 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("...")
Copy to Clipboard Toggle word wrap

注意
解决守护进程解决方案应该被迁移为使用 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("...")
Copy to Clipboard Toggle word wrap

可以使用 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

Theme

© 2025 Red Hat