Apache Camel 4.x Upgrade Guide
This document is for helping you upgrade your Apache Camel application from Camel 4.x to 4.y. For example, if you are upgrading Camel 4.0 to 4.2, then you should follow the guides from both 4.0 to 4.1 and 4.1 to 4.2.
Upgrading Camel 4.2 to 4.3
camel-core
Moved class org.apache.camel.impl.engine.MemoryStateRepository
from camel-base-engine to org.apache.camel.support.processor.state.MemoryStateRepository
in camel-support.
Moved class org.apache.camel.impl.engine.FileStateRepository
from camel-base-engine to org.apache.camel.support.processor.state.FileStateRepository
in camel-support.
Resequence EIP
The configuration for batch and stream has been renamed from batch-config
to batchConfig
and stream-config
to streamConfig
.
For example before:
<resequence>
<stream-config timeout="1000" deliveryAttemptInterval="10"/>
<simple>${header.seqnum}</simple>
<to uri="mock:result" />
</resequence>
And now after:
<resequence>
<streamConfig timeout="1000" deliveryAttemptInterval="10"/>
<simple>${header.seqnum}</simple>
<to uri="mock:result" />
</resequence>
Throttle EIP
Throttle now uses the number of concurrent requests as the throttling measure instead of the number of requests per period.
Update throttle expressions configured with maxRequestsPerPeriod
to use maxConcurrentRequests
instead, and remove any timePeriodMillis
option.
For example, update the following:
long maxRequestsPerPeriod = 100L;
from("seda:a")
.throttle(maxRequestsPerPeriod).timePeriodMillis(500)
.to("seda:b")
// 1000 ms default time period
from("seda:c")
.throttle(maxRequestsPerPeriod)
.to("seda:d")
to use maxConcurrentRequests
:
long maxConcurrentRequests = 30L;
from("seda:a")
.throttle(maxConcurrentRequests)
.to("seda:b")
from("seda:c")
.throttle(maxConcurrentRequests)
.to("seda:d")
Consumer health checks
The scheduled consumers have been improved to mark the consumer as ready sooner, when possible. Previously a consumer would mark as ready after the first poll was completed. For example, an FTP consumer downloading a big file on the first poll could take so long time that the readiness check would timeout and fail during the startup of your Camel application.
The following components are now marking the consumer as ready sooner:
-
camel-aws
-
camel-azure
-
camel-box
-
camel-dhis2
-
camel-fhir
-
camel-couchbase
-
camel-ftp
-
camel-google
-
camel-ironmq
-
camel-jooq
-
camel-jpa
-
camel-mail
-
camel-minio
-
camel-mybatis
-
camel-olingo2
-
camel-olingo4
-
camel-slack
-
camel-splunk
-
camel-sql
-
camel-twilio
-
camel-zendesk
camel-management
If the nodeIdPrefix
has been configured on routes, then the MBeans for the processors will now use the prefix in their ObjectName
also.
camel-console
The context and route consoles have changed some values in their JSON output data for timestamp for created, completed and failed exchanges.
Old Key | New Key |
|
|
|
|
|
|
The values are also changed from String ago to timestamp in millis.For example, old value 3m5s
is now 1701599263337
.
camel-jbang
The camel transform
command has been renamed to camel transform route
as this command is used for transforming routes between DSLs such as XML to YAML.
There is a new camel transform message
command to do message transformation.
camel-jetty
Jetty has been upgraded from v11 to v12. End users may need to adjust to changes in Jetty.
camel-kafka
The behavior for breakOnFirstError
was altered as numerous issues were fixed. The behavior related to committing the offset is now determined by the CommitManager
that is configured.
When the default CommitManager
is used (NoopCommitManager
) then no commit is performed. The route implementation will be responsible for managing the offset using KafkaManualCommit
to manage the retrying of the payload.
When using the SyncCommitManager
then the offset will be committed so that the payload is continually retried. This was the behavior described in the documentation.
When using the AsyncCommitManager
then the offset will be committed so that the payload is continually retried. This was the behavior described in the documentation.
camel-yaml-dsl
Using kebab-case in general has been deprecated, and you will see a WARN logs. Please migrate to camelCase.
The language for exchange property now only supports camelCase style, i.e. exchange-property
is now exchangeProperty
.
The camelYamlDsl.json
Schema file has removed inheritErrorHandler
option for all EIPs where it was not applicable. This option is only intended for the Load Balancer EIP. This makes the YAML schema in-line with the XML DSL schema.