[[migration-5.3-5.4]]
= Changes between 5.3 and 5.4

[[x5.4-new-components]]
== New Components

[[x5.4-sik]]
== Channel Adapters for Apache Kafka
The standalone https://projects.spring.io/spring-integration-kafka/[Spring Integration for Apache Kafka] project has been merged as a `spring-integration-kafka` module to this project.

The `KafkaProducerMessageHandler` `sendTimeoutExpression` default has changed.

You can now access the `Future<?>` for underlying `send()` operations.

See xref:kafka.adoc[Spring for Apache Kafka Support] for more information.

[[x5.4-r2dbc]]
== R2DBC Channel Adapters

The Channel Adapters for R2DBC database interaction have been introduced.
See xref:r2dbc.adoc[R2DBC Support] for more information.

[[x5.4-redis-stream]]
== Redis Stream Support

The Channel Adapters for Redis Stream support have been introduced.
See xref:redis.adoc#redis-stream-outbound[Redis Stream Outbound Channel Adapter] for more information.

[[x5.4-renewable-lock]]
== Renewable Lock Registry

A Renewable lock registry has been introduced to allow renew lease of a distributed lock.
See xref:jdbc.adoc#jdbc-lock-registry[JDBC implementation] for more information.

[[x5.4-zeromq]]
== ZeroMQ Support

`ZeroMqChannel`, `ZeroMqMessageHandler` and `ZeroMqMessageProducer` have been introduced.
See xref:zeromq.adoc[ZeroMQ Support] for more information.

[[x5.4-general]]
== General Changes

The one-way messaging gateway (the `void` method return type) now sets a `nullChannel` explicitly into the `replyChannel` header to ignore any possible downstream replies.
See xref:gateway.adoc#gateway-default-reply-channel[Setting the Default Reply Channel] for more information.

Also the gateway method invokers (`GatewayProxyFactoryBean.MethodInvocationGateway`) are now supplied with the managed bean name as a combination of gateway proxy bean name plus method signature.
For example: `sampleGateway#echo(String)`.
This effects message history and metrics exposed for the gateway method calls and also give fine-grained logs during start and close of application context.

The aggregator (and resequencer) can now expire orphaned groups (groups in a persistent store where no new messages arrive after an application restart).
See xref:aggregator.adoc#aggregator-expiring-groups[Aggregator Expiring Groups] for more information.

The legacy metrics that were replaced by Micrometer meters have been removed.

The xref:barrier.adoc[Thread Barrier] has now two separate timeout options: `requestTimeout` and `triggerTimeout`.

[[x5.4-tcp]]
== TCP/UDP Changes

Connection factories now support multiple sending components (`TcpSender`); they remain limited to one receiving component (`TcpListener`).
This allows, for example, an inbound gateway and outbound channel adapter to share the same factory, supporting both request/reply and arbitrary messaging from the server to the client.
Shared factories should not be used with outbound gateways, unless single-use connections or the `ThreadAffinityClientConnectionFactory` are being used.
See xref:ip/correlation.adoc#ip-collaborating-adapters[Collaborating Channel Adapters] and xref:ip/tcp-gateways.adoc[TCP Gateways] for more information.

The UDP channel adapters can now be configured with a `SocketCustomizer` which allows the setting of socket properties that are not directly supported by the adapters.
See xref:ip/udp-adapters.adoc[UDP Adapters] for more information.

[[x5.4-amqp]]
== AMQP Changes

The outbound endpoints now have a new mechanism for handling publisher confirms and returns.
See xref:amqp/alternative-confirms-returns.adoc[Alternative Mechanism for Publisher Confirms and Returns] for more information.

A new `BatchMode.EXTRACT_PAYLOAD_WITH_HEADERS` is supported by the `AmqpInboundChannelAdapter`.
See xref:amqp/inbound-channel-adapter.adoc[Inbound Channel Adapter] for more information.

[[x5.4-mail]]
== Mail Changes

The `AbstractMailReceiver` can now produce the `MimeMessage` as-is without eager fetching its content.
See xref:mail.adoc#mail-inbound[Mail-receiving Channel Adapter] for more information.
