3.2. 迁移到 Apache Camel 4
本节提供了可帮助您将 Apache Camel 应用程序从 3.20 或更高版本迁移到 4.0 的信息。
有关单个版本的详情,请参考:
有关如何升级 Apache Camel Quarkus 的详情,请参考:
3.2.1. Java 版本 复制链接链接已复制到粘贴板!
Apache Camel 4 支持 Java 17。丢弃了对 Java 11 的支持。
3.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 |
3.2.3. 日志记录 复制链接链接已复制到粘贴板!
Camel 4 将日志 facade API slf4j-api 从 1.7 升级到 2.0。
3.2.4. JUnit 4 复制链接链接已复制到粘贴板!
所有基于 JUnit 4.x 的 camel-test 模块已被删除。所有测试模块现在都使用 JUnit 5。
3.2.5. API 更改 复制链接链接已复制到粘贴板!
以下 API 已被弃用并从版本 4 中删除:
-
org.apache.camel.ExchangePattern已删除了InOptionalOut。 -
从
CamelContext中移除getEndpointMap ()方法。 -
删除了
@FallbackConverter,因为您应该改为使用@Converter (fallback = true)。 -
removed
uri属性@EndpointInject,@Produce, 和@Consume替代值(默认)。例如,@Produce (uri = "kafka:cheese")应更改为@Produce ("kafka:cheese") -
删除了
@UriEndpoint上的标签,因为您应该使用类别。 -
删除了
ProducerTemplate上的所有asyncCallback方法。改为使用asyncSend或asyncRequest。 -
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.ExtendedCamelContext与org.apache.camel.CamelContext分离。 -
使用
getCamelContextExtension替换org.apache.camel.CamelContext的adapt () -
将
org.apache.camel.ExtendedExchange与org.apache.camel.Exchange分离。 -
使用
getExchangeExtension替换org.apache.camel.ExtendedExchange的adapt () -
交换失败处理状态已从定义为
ExchangePropertyKey.FAILURE_HANDLED的属性移到 ExtendedExchange 的成员,可通过 'isFailureHandled ()'method 访问。 -
从
org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy中删除了Discard和DiscardOldest。 -
删除了
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方法现在默认为false,而不是true。 -
向
org.apache.camel.StreamCache添加了位置方法。 -
从接口
org.apache.camel.main.Listener配置的方法已被删除 -
org.apache.camel.support.EventNotifierSupportabstract 类现在实现了CamelContextAware。 -
CamelContext上的dumpRoutes的类型已从布尔值改为String,以允许指定 xml 或 yaml。
org.apache.camel.support.PluginHelper 提供对以前来自 CamelContext 的 Camel v3 中可用的各种扩展和上下文插件的简单访问。
3.2.6. EIP 更改 复制链接链接已复制到粘贴板!
-
每个 EIPs 上删除了 <
;description> 的lang属性。 -
InOnly和InOutEIPs 已被删除。反之,使用SetExchangePattern或 to 指定要使用的交换模式。
3.2.6.1. poll Enrich EIP 复制链接链接已复制到粘贴板!
轮询的端点 URI 现在作为属性存储在 Exchange 上(带有键 CamelToEndpoint),与其他 EIPs 一样。在 URI 作为消息标头存储之前。
3.2.6.2. CircuitBreaker EIP 复制链接链接已复制到粘贴板!
camel-resilience4j 中的以下选项被错误地定义为属性:
| 选项 |
| bulkheadEnabled |
| bulkheadMaxConcurrentCalls |
| bulkheadMaxWaitDuration |
| timeoutEnabled |
| timeoutExecutorService |
| timeoutDuration |
| timeoutCancelRunningFuture |
这些选项没有在 YAML DSL 中公开,在您需要迁移的 XML DSL 中:
使用以下属性:
<circuitBreaker>
<resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
...
</circuitBreaker>
<circuitBreaker>
<resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
...
</circuitBreaker>
3.2.7. XML DSL 复制链接链接已复制到粘贴板!
在路由或节点上设置描述的 <description> 已从元素改为一个属性。
Example
<route id="myRoute" description="Something that this route do"> <from uri="kafka:cheese"/> ... </route>
<route id="myRoute" description="Something that this route do">
<from uri="kafka:cheese"/>
...
</route>
3.2.8. 类型 Converter 复制链接链接已复制到粘贴板!
String java.io.File converter 已被删除。
3.2.9. Tracing 复制链接链接已复制到粘贴板!
Tracer 和 Backlog Tracer 不再包含由 Rest DSL 或 route templates 或 Kamelets 创建的路由的内部追踪事件。您可以通过在 tracer 中设置 traceTemplates=true 来打开它。
Backlog Tracer 已被改进,并 修复了 trace 消息标头(也流类型)。这意味着之前没有跟踪 InputStream 类型的标头,但现在包含。这可能意味着标头流在结尾处,并在后记录标头后可能会出现,因为标头值为空。
3.2.10. UseOriginalMessage / UseOriginalBody 复制链接链接已复制到粘贴板!
当在 OnException、OnCompletion 或错误处理程序中启用 useOriginalMessage 或 useOriginalBody 时,原始消息正文会完全复制,如果可能转换为 StreamCache,以确保正文可以在访问时重新读取。在以前的版本中,原始正文没有转换为 StreamCache,这可能会导致正文无法读取或关闭流。
3.2.11. Camel Health 复制链接链接已复制到粘贴板!
现在,健康检查只会开箱即用的就绪度检查。Camel 提供 CamelContextCheck 作为就绪度和存活度检查,因此开箱即用至少一个。默认只启用基于消费者的健康检查。
3.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
camel.health.producers-enabled = true
3.2.12. JMX 复制链接链接已复制到粘贴板!
Camel 现在还包括 doCatch 的 MBeans,并在处理器 MBeans 的树中进行 最后。
ManagedChoiceMBean 已将 choiceStatistics 重命名为 extendedInformation。ManagedFailoverLoadBalancerMBean 将 exceptionStatistics 重命名为 extendedInformation。
CamelContextMBean 和 CamelRouteMBean 删除了方法 dumpRouteAsXml (布尔值 resolvePlaceholders,布尔值 resolveDelegateEndpoints)。
3.2.13. YAML DSL 复制链接链接已复制到粘贴板!
向后兼容模式 Camel 3.14 或更早版本,允许作为 路由 子级 步骤 已被删除。
新语法为:
- route:
from:
uri: "direct:info"
steps:
- log: "message"
- route:
from:
uri: "direct:info"
steps:
- log: "message"
3.2.14. backlog Tracing 复制链接链接已复制到粘贴板!
选项 backlogTracing=true 现在会自动启用来在启动时启动 tracer。在以前的版本中,tracer 仅可用,之后必须手动启用。可以通过设置 backlogTracingStandby=true 来归档旧行为。
将以下类从 camel-management-api JAR 中的 org.apache.camel.api.management.mbean.BacklogTracerEventMessage 移到 org.apache.camel.spi.BacklogTracerEventMessage。
org.apache.camel.impl.debugger.DefaultBacklogTracerEventMessage 已重构为接口 org.apache.camel.spi.BacklogTracerEventMessage,其中包含有关 traced 消息的一些额外详情。例如,Camel 现在捕获包含输入和输出(如果为 InOut)消息的 第一个和最后一个 trace。
3.2.15. XML 序列化 复制链接链接已复制到粘贴板!
使用 ModelToXMLDumper 的默认 xml 序列化已被改进,现在使用 camel-xml-io 模块中的生成的 xml serializer,而不是从 camel-jaxb 的一个 JAXB。
3.2.16. OpenAPI Maven 插件 复制链接链接已复制到粘贴板!
camel-restdsl-openapi-plugin Maven 插件现在使用 platform-http 作为生成的 Rest DSL 代码中的默认其余组件,因为它是一个更好的默认设置,它与 Quarkus 一起工作。
3.2.17. 组件更改 复制链接链接已复制到粘贴板!
3.2.17.1. 类别 复制链接链接已复制到粘贴板!
org.apache.camel.Category 的枚举数量已从 83 减少到 37,这意味着使用删除的值的自定义组件需要选择一个剩余的值。我们这样做是为了整合 Camel 社区中所有组件的类别。
3.2.17.2. camel-openapi-rest-dsl-generator 复制链接链接已复制到粘贴板!
此 dsl-generator 已将底层模型类(apicurio-data-models)从 1.1.27 更新至 2.0.3。
3.2.17.3. camel-atom 复制链接链接已复制到粘贴板!
camel-atom 组件已将 Apache Abdera 的第三方从 Apache Abdera 改为 RSSReader。这意味着源对象已从 org.apache.abdera.model.Feed 改为 com.apptasticsoftware.rssreader.Item。
3.2.17.4. camel-azure-cosmosdb 复制链接链接已复制到粘贴板!
itemPartitionKey 已更新。现在,一个字符串 a not a PartitionKey。CAMEL-19222 中的更多详细信息。
3.2.17.5. camel-bean 复制链接链接已复制到粘贴板!
当使用 method 选项引用特定方法时,并使用参数类型和值,例如 :"bean:myBean?method=foo (com.foo.MyOrder, true) ", 任何类类型现在都必须使用 .class 语法,即 com. 。
foo.MyOrder.MyOrder
Example
"bean:myBean?method=foo(com.foo.MyOrder.class, true)"
"bean:myBean?method=foo(com.foo.MyOrder.class, true)"
这也适用于 Java 类型,如 String、int。
"bean:myBean?method=bar(String.class, int.class)"
"bean:myBean?method=bar(String.class, int.class)"
3.2.17.6. camel-box 复制链接链接已复制到粘贴板!
从 Box Java SDK v2 升级到 v4,其有一些方法签名更改。获取文件缩略图的方法不再可用。
3.2.17.7. camel-caffeine 复制链接链接已复制到粘贴板!
keyType 参数已被删除。缓存的密钥现在仅是 String 类型。CAMEL-18877 中的更多信息。
3.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。有关底层更改的详细列表(只在 Camel 中使用 hapi-fhir 客户端,请参阅 hapi-fhir 客户端)。
3.2.17.9. camel-google 复制链接链接已复制到粘贴板!
基于 API 的组件 camel-google-drive,camel-google-calendar,camel-google-sheets 和 camel-google-mail 已从 Google Java SDK v1 升级到 v2,以及最新的 API 修订。camel-google-drive 和 camel-google-sheets 有一些 API 方法更改,但其他方法与之前相同。
3.2.17.10. camel-http 复制链接链接已复制到粘贴板!
组件已升级至使用 Apache HttpComponents v5,这会影响底层客户端的配置方式。有 4 个不同的超时(connectionRequestTimeout,connectTimeout,soTimeout , soTimeout,)而不是最初 3 (connectionRequestTimeout,connectTimeout, 和 socketTimeout),它们的默认值已更改。详情请参考文档。
请注意,socketTimeout 已从 HttpClient 的可能配置参数中删除,改为使用 responseTimeout。
最后,选项 soTimeout 以及 SocketConfig 中包含的任何参数,需要以 httpConnection. 前缀。(包括定义到 HttpClientBuilder 和 RequestConfig 的参数等)需要加上 httpClient 前缀。
3.2.17.11. camel-http-common 复制链接链接已复制到粘贴板!
org.apache.camel.http.common.HttpBinding 中的 API 稍微更改为可重复利用。parseBody 方法现在使用 HttpServletRequest 作为输入参数。所有 HttpMessage 已更改为通用 消息类型。
3.2.17.12. camel-kubernetes 复制链接链接已复制到粘贴板!
io.fabric8:kubernetes-client 库已被升级,一些已弃用的 API 用量已被删除。之前带有 replace 前缀的操作现在带有 update 前缀。
例如,replaceConfigMap 现在是 updateConfigMap,replacePod 现在为 updatePod 等。类 KubernetesOperations 中的对应常量也被重命名。REPLACE_CONFIGMAP_OPERATION 现在是 UPDATE_CONFIGMAP_OPERATION,REPLACE_POD_OPERATION 现在为 UPDATE_POD_OPERATION 等。
3.2.17.13. camel-web3j 复制链接链接已复制到粘贴板!
camel-web3j 将 web3j JAR 从 3.x 升级到 5.0,它有许多 API 更改,因此一些以前的 API 调用不会被提供。
3.2.17.14. camel-main 复制链接链接已复制到粘贴板!
以下常数已从 BaseMainSupport / Main to 移动:
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 |
3.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 |
3.2.17.16. camel-jbang 复制链接链接已复制到粘贴板!
camel 依赖项 命令已被重命名为 camel 依赖项。
在 Camel JBang 中,init 和 run 目标的 -dir 参数已被重命名为需要 2 dashes --dir,与所有其他选项一样。
camel stop 命令现在默认停止所有正在运行的集成(删除了 --all 选项)。
Placeholders 替换 被修改为使用 #name 而不是 $name 语法。
3.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 规格。
3.2.17.18. camel-optaplanner 复制链接链接已复制到粘贴板!
camel-optaplanner 组件已改为使用 SolverManager。如果您在 Camel 3 中使用 SoverManager,则不需要在 Route 中使用布尔值 useSolverManager。弃用的 ProblemFactChange 已被 ProblemChange 替代。
新 URI 路径为:
from("optaplanner:myProblemName")
.to("...")
from("optaplanner:myProblemName")
.to("...")
您可以通过两种方式传递 Optaplanner SolverManager:
- 以 #parameter 的身份
- 作为标头
在 Quarkus 上运行 camel-optaplanner 时,请使用创建 SolverManager 的 Quarkus 方法。
您可以通过提供 XML 配置文件来迁移旧的 Camel Optaplanner 路由,它允许 Camel Optaplanner 处理为这些旧路由创建 SolverManager,具体如以下代码中所示:
提供 Optaplanner Routes XML 配置文件
from("optaplanner:myProblemName?configFile=PATH/TO/CONFIG.FILE.xml")
.to("...")
from("optaplanner:myProblemName?configFile=PATH/TO/CONFIG.FILE.xml")
.to("...")
- 注意
- solver Daemon 解决方案应该迁移到使用 SolverManager。
3.2.17.19. camel-platform-http-vertx 复制链接链接已复制到粘贴板!
如果路由或消费者被暂停,则 http status 503 现在会返回,而不是 404。
3.2.17.20. camel-salesforce 复制链接链接已复制到粘贴板!
生成的 DTOs 上的 blob 字段的属性名称不再有 'Url' affixed。例如,ContentVersionUrl 属性现在是 ContentVersion。
3.2.17.21. camel-slack 复制链接链接已复制到粘贴板!
默认延迟(在 slack 消费者上)从 0.5s 改为 10s,以避免被 Slack 的速率限制。
3.2.17.22. camel-micrometer-starter 复制链接链接已复制到粘贴板!
uri 标签现在是静态的,而不是动态标签(默认情况下,因为 URI 使用动态值生成的标签太多)。这可以通过设置 camel.metrics.uriTagDynamic=true 来再次启用。
3.2.17.23. camel-platform-http-starter 复制链接链接已复制到粘贴板!
platform-http-starter 已从使用 camel-servlet 改为直接使用 HTTP 服务器。因此,所有 HTTP 端点不再以 servlet context-path 前缀(默认为 camel)。
例如:
HTTP 端点
from("platform-http:myservice")
.to("...")
from("platform-http:myservice")
.to("...")
端点可以使用 http://localhost:8080/myservice 调用,因为没有使用 context-path。
platform-http-starter 也可以用于 Rest DSL。
如果路由或消费者被暂停,则 http status 503 现在会返回,而不是 404。
3.2.17.24. camel-twitter 复制链接链接已复制到粘贴板!
camel-twitter 组件已更新为使用 Twitter4j 版本 4.1.2,它已移动了几个类使用 的软件包。如果访问某些与二者相关的数据,如 Twit 状态,您需要将从 twitter4j.Status 中使用的软件包更新为 twitter4j.v1.Status。