Changes between 4.0 and 4.1

参见 Migration Guide以了解可能影响应用程序的重要更改。您可以在 wiki中找到从 2.1 版开始的所有版本的迁移指南。

New Components

版本 4.1 添加了许多新组件。

Promise<?> Gateway

消息网关方法现在支持 Reactor `Promise`返回类型。请参阅 Asynchronous Gateway

WebSocket support

WebSocket`模块现已推出。它完全基于 Spring WebSocket 和 Spring Messaging 模块,并提供 `<inbound-channel-adapter>`和 `<outbound-channel-adapter>。有关详细信息,请参阅 WebSockets Support

Scatter-Gather Enterprise Integration Pattern

我们实施了分散收集企业集成模式。有关详细信息,请参阅 Scatter-Gather

Routing Slip Pattern

我们添加了路由单据 EIP 模式实现。有关详细信息,请参见 Routing Slip

Idempotent Receiver Pattern

通过在 XML 中添加 `<idempotent-receiver>`组件或为 Java 配置添加 `IdempotentReceiverInterceptor`和 `IdempotentReceiver`注释,我们添加了幂等接收方企业集成模式实现。有关详细信息,请参见 Idempotent Receiver Enterprise Integration PatternJavadoc

Boon JsonObjectMapper

我们为 JSON 转换器添加了 Boon JsonObjectMapper。有关详细信息,请参见 Transformer

Redis Queue Gateways

我们添加了 `<redis-queue-inbound-gateway>`和 `<redis-queue-outbound-gateway>`组件。请参阅 Redis Queue Inbound GatewayRedis Queue Outbound Gateway

PollSkipAdvice

我们增加了 PollSkipAdvice,您可以在 `<advice-chain>`的 `<poller>`内使用它来确定当前的轮询是否应通过使用 `PollSkipStrategy`实现的某些条件来抑制(跳过)。有关更多信息,请参阅 Poller

General Changes

本节描述了从 4.0 版到 4.1 版的一般性更改。

AMQP Inbound Endpoints, Channel

现在使用消息侦听器容器(入站端点和通道)的元素支持 `missing-queues-fatal`属性。有关更多信息,请参见 AMQP Support

AMQP Outbound Endpoints

AMQP 出站端点支持一个名为 lazy-connect(默认: true)的新属性。当 `true`时,与代理的连接在第一个消息到达之前不会建立(假设没有入站端点,它们始终会在启动期间尝试建立连接)。当设定 `false`时,会在应用程序启动期间尝试建立连接。请参阅 AMQP Support了解更多信息。

SimpleMessageStore

调用 `getMessageGroup()`时,`SimpleMessageStore`不再复制组。请参阅 [id="WARNING"]message-store.adoc#sms-caution了解更多信息。

Web Service Outbound Gateway: encode-uri

<ws:outbound-gateway/> 现在提供了一个 encode-uri 属性,允许在发送请求之前禁用 URI 对象的编码。

Http Inbound Channel Adapter and Status Code

现在可使用 `status-code-expression`配置 `<http:inbound-channel-adapter>`以覆盖默认 `200 OK`状态。有关更多信息,请参见 HTTP Namespace Support

MQTT Adapter Changes

您现在可以配置 MQTT 通道适配器以连接到多台服务器 - 例如,支持高可用性 (HA)。有关详细信息,请参见 MQTT Support

MQTT 消息驱动通道适配器现在支持为每个订阅指定 QoS 设置。有关更多信息,请参阅 Inbound (Message-driven) Channel Adapter

MQTT 出站通道适配器现支持异步发送,避免阻塞,直至已确认传送。请参阅 Outbound Channel Adapter 了解更多信息。

现在可以在运行时以编程方式订阅和取消订阅主题。请参阅 Inbound (Message-driven) Channel Adapter 了解更多信息。

FTP and SFTP Adapter Changes

FTP 和 SFTP 出站通道适配器现在支持追加到远程文件以及在远程文件已存在时执行特定操作。远程文件模板现在也支持此功能,以及 rmdir()exists()。此外,远程文件模板提供对底层客户端对象的访问,从而可以访问低级 API。

有关更多信息,请参见FTP/FTPS AdaptersSFTP Adapters

Splitter and Iterator

`Splitter`组件现在支持 `Iterator`作为用于生成输出消息的结果对象。有关更多信息,请参见 Splitter

Aggregator

Aggregator 实例现在支持一个新属性 expire-groups-upon-timeout。请参阅 Aggregator 了解更多信息。

Content Enricher Improvements

我们添加了一个 null-result-expression`属性,如果 `<enricher>`返回 `null,则计算属性并返回属性。您可以在 `<header>`和 `<property>`中添加该属性。有关更多信息,请参见 Content Enricher

我们添加了一个 `error-channel`属性,如果 `Exception`发生在 `request-channel`之后,则用作处理错误流。这允许您返回要用于填充的替换对象。有关更多信息,请参见 Content Enricher

Header Channel Registry

<header-enricher/> 元素的 <header-channels-to-string/> 子元素现在可以覆盖头通道注册表默认保留通道映射的时间。请参阅 Header Channel Registry 了解更多信息。

Orderly Shutdown

我们改进了有序关闭算法。有关更多信息,请参见 Orderly Shutdown

Management for RecipientListRouter

RecipientListRouter 现在提供一些管理操作,以在运行时配置接收者。这样一来,你现在可以在没有任何 <recipient> 的情况下配置 <recipient-list-router>。请参阅 RecipientListRouterManagement 了解更多信息。

AbstractHeaderMapper: NON_STANDARD_HEADERS token

现已提供 AbstractHeaderMapper 实现,提供了额外的 NON_STANDARD_HEADERS 令牌来映射默认情况下未映射的任何用户定义标题。有关更多信息,请参见 AMQP Message Headers

AMQP Channels: template-channel-transacted

针对 AMQP MessageChannel 实例,我们引入了 template-channel-transacted 属性。有关更多信息,请参见 AMQP-backed Message Channels

Syslog Adapter

默认 syslog 消息转换器现在可以选择将原始消息保留在有效负载中,同时仍然设置头。请参阅 Syslog Inbound Channel Adapter 了解更多信息。

Asynchronous Gateway

除了 Promise 返回类型 mentioned earlier 之外,网关方法现在可以返回 Spring Framework 4.0 中引入的 ListenableFuture。你还可以禁用网关中的异步处理,让下游流直接返回 Future。请参阅 Asynchronous Gateway

Aggregator Advice Chain

AggregatorResequencer 现在支持 <expire-advice-chain/><expire-transactional/> 子元素,以通知 forceComplete 操作。请参阅 Configuring an Aggregator with XML 了解更多信息。

Outbound Channel Adapter and Scripts

现已支持 <int:outbound-channel-adapter/> 支持 <script/> 子元素。基础脚本必须具有 void 返回类型,或返回 null。请参见 Groovy supportScripting Support

Resequencer Changes

当重新排序器中的消息组超时(使用 group-timeoutMessageGroupStoreReaper)时,默认情况下,迟到的消息现在会立即丢弃。请参见 Resequencer

Optional POJO method parameter

Spring Integration 现一贯处理 Java 8 的 Optional 类型。请参阅 Configuring Service Activator

QueueChannel backed Queue type

QueueChannel 支持的 Queue type 已从 BlockingQueue 更改为更为通用的 Queue。此更改允许使用任何外部 Queue 实现(例如 Reactor 的 PersistentQueue)。请参阅 QueueChannel Configuration

ChannelInterceptor Changes

ChannelInterceptor 现在支持附加的 afterSendCompletion() 方法和 afterReceiveCompletion() 方法。请参见 Channel Interceptors

IMAP PEEK

从版本 4.1.1 开始,如果你将 mail.[protocol].peek JavaMail 属性显式设置为 false(其中 [protocol]imapimaps),那么行为会发生改变。请参阅 IMAP PEEK[id="IMPORTANT"]