5.4 和 5.5 之间的变更
新组件
文件聚合器
基于 FileSplitter.FileMaker 实现的 CorrelationStrategy、ReleaseStrategy 和 MessageGroupProcessor 作为 FileAggregator 组件被引入。更多信息请参见 文件聚合器。
MQTT v5 支持
Mqttv5PahoMessageDrivenChannelAdapter 和 Mqttv5PahoMessageHandler(包括各自的 MqttHeaderMapper)被引入以支持 MQTT v5 协议通信。有关更多信息,请参阅 MQTT v5 支持。
通用更改
所有持久化的 MessageGroupStore 实现都提供了一个基于目标数据库流式 API 的 streamMessagesForGroup(Object groupId) 合约。更多信息,请参见 消息存储。
integrationGlobalProperties bean(如果已声明)现在必须是 org.springframework.integration.context.IntegrationProperties 的实例,而不是 java.util.Properties,后者为了向后兼容已被弃用。添加了全局属性 spring.integration.channels.error.requireSubscribers=true 以指示全局默认的 errorChannel 必须使用 requireSubscribers 选项进行配置(或不使用)。添加了全局属性 spring.integration.channels.error.ignoreFailures=true 以指示全局默认的 errorChannel 必须忽略(或不忽略)分发错误并将消息传递给下一个处理程序。更多信息请参见全局属性。
一个 AbstractPollingEndpoint(源轮询通道适配器和轮询消费者)将 maxMessagesPerPoll == 0 视为跳过调用源。之后可以通过例如控制总线将其更改为不同的值。更多信息请参见 轮询消费者。
ConsumerEndpointFactoryBean 现在接受一个 reactiveCustomizer Function,用于将任何输入通道作为反应式流源,并在底层使用 ReactiveStreamsConsumer。这在 Java DSL 中作为一个 ConsumerEndpointSpec.reactive() 选项被覆盖,并且在消息注解中作为一个嵌套的 @Reactive 注解。更多信息,请参见 反应式流支持。
groupTimeoutExpression 用于关联消息处理器(Aggregator 和 Resequencer)现在可以评估为 java.util.Date,以满足一些细粒度调度用例。此外,AbstractCorrelatingMessageHandler 添加了 BiFunction groupConditionSupplier 选项,以提供针对要添加到组的消息的 MessageGroup 条件。有关更多信息,请参阅 Aggregator。
MessageGroup 抽象可以提供一个 condition,以便稍后评估以供组决策。详见 消息组条件 了解更多详细信息。
集成流组合
新增了 IntegrationFlows.from(IntegrationFlow) 工厂方法,以允许从现有流的输出启动当前的 IntegrationFlow。此外,IntegrationFlowDefinition 添加了 to(IntegrationFlow) 终端操作符,以在其他某个流的输入通道继续当前流。更多信息请参见 集成流组合。
AMQP 更改
AmqpInboundChannelAdapter 和 AmqpInboundGateway(以及各自的 Java DSL 构建器)现在支持 org.springframework.amqp.rabbit.retry.MessageRecoverer 作为 AMQP 特定的替代方案,用于通用的 RecoveryCallback。更多信息请参见 AMQP 支持。
Redis 更改
ReactiveRedisStreamMessageProducer 现在为所有 StreamReceiver.StreamReceiverOptionsBuilder 选项提供了 setter 方法,包括一个 onErrorResume 函数。更多信息请参见 Redis 支持。
HTTP 变化
HttpRequestExecutingMessageHandler 不再回退到 application/x-java-serialized-object 内容类型,而是让 RestTemplate 根据提供的 HttpMessageConverter 对请求体转换做出最终决定。它现在还增加了一个 extractResponseBody 标志(默认为 true),用于仅返回响应体,或作为回复消息的有效负载返回整个 ResponseEntity,这独立于提供的 expectedResponseType。WebFluxRequestExecutingMessageHandler 也有相同的选项。更多信息,请参见 HTTP 支持。
文件/FTP/SFTP 更改
持久文件列表过滤器现在有一个布尔属性 forRecursion。将此属性设置为 true 时,也会设置 alwaysAcceptDirectories,这意味着在出站网关 (ls 和 mget) 上的递归操作每次都将遍历整个目录树。这是为了解决目录树深层中的更改未被检测到的问题。此外,forRecursion=true 会导致使用文件的完整路径作为元数据存储键;这解决了如果不同目录中出现同名文件时过滤器无法正常工作的问题。重要提示:这意味着现有键在一个持久元数据存储中对于顶级目录下的文件将无法找到。因此,默认情况下该属性为 false;这可能在未来的版本中更改。
FileInboundChannelAdapterSpec 现在有一个方便的 recursive(boolean) 选项,而不是需要显式引用 RecursiveDirectoryScanner。
现在可以在 mv 命令中使用 remoteDirectoryExpression 以方便操作。
MongoDb 更改
MongoDbMessageSourceSpec 已添加到 MongoDd Java DSL 中。现在 MongoDbMessageSource 和 ReactiveMongoDbMessageSource 实现都暴露了一个 update 选项。
更多信息请参见 MongoDb 支持。
WebSockets 更改
基于 ServerWebSocketContainer 的 WebSocket 通道适配器现在可以在运行时注册和移除。
更多信息请参见 WebSockets 支持。
JPA 更改
JpaOutboundGateway 现在支持 Iterable 消息负载用于 PersistMode.DELETE。
更多信息请参见 Outbound Channel Adapter。
网关更改
之前,在使用 XML 配置时,@Gateway.payloadExpression 对于无参数方法会被忽略。存在一个可能的破坏性变更 - 如果方法同时注解了 @Payload 和 @Gateway(带有不同的表达式),之前会应用 @Payload,现在则会应用 @Gateway.payloadExpression。更多信息请参见 使用注解和 XML 的网关配置 和 调用无参数方法。