5.4 和 5.5 之间的变化

新组件

文件聚合器

引入了基于 FileSplitter.FileMakerCorrelationStrategyReleaseStrategyMessageGroupProcessor 实现,作为一个 FileAggregator 组件。 有关更多信息,请参阅 文件聚合器

MQTT v5 支持

引入了 Mqttv5PahoMessageDrivenChannelAdapterMqttv5PahoMessageHandler(包括相应的 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 嵌套注解涵盖。 有关更多信息,请参阅 响应式流支持

关联消息处理器(AggregatorResequencer)的 groupTimeoutExpression 现在可以评估为 java.util.Date,以用于某些细粒度调度用例。 此外,AbstractCorrelatingMessageHandler 中添加了 BiFunction groupConditionSupplier 选项,用于为要添加到组中的消息提供 MessageGroup 条件。 有关更多信息,请参阅 聚合器

MessageGroup 抽象可以提供一个 condition,以便稍后评估以对组做出决策。 有关更多信息,请参阅 消息组条件

集成流组合

添加了新的 IntegrationFlows.from(IntegrationFlow) 工厂方法,允许从现有流的输出开始当前的 IntegrationFlow。 此外,IntegrationFlowDefinition 添加了一个 to(IntegrationFlow) 终端操作符,用于在其他流的输入通道处继续当前流。 有关更多信息,请参阅 集成流组合

AMQP 更改

AmqpInboundChannelAdapterAmqpInboundGateway(以及相应的 Java DSL 构建器)现在支持 org.springframework.amqp.rabbit.retry.MessageRecoverer 作为通用 RecoveryCallback 的 AMQP 特定替代方案。 有关更多信息,请参阅 AMQP 支持

Redis 更改

ReactiveRedisStreamMessageProducer 现在为所有 StreamReceiver.StreamReceiverOptionsBuilder 选项(包括 onErrorResume 函数)提供了 setter 方法。 有关更多信息,请参阅 Redis 支持

HTTP 更改

HttpRequestExecutingMessageHandler 不再回退到 application/x-java-serialized-object 内容类型,而是让 RestTemplate 根据提供的 HttpMessageConverter 对请求体转换做出最终决定。 它现在还有一个 extractResponseBody 标志(默认为 true),用于仅返回响应体,或将整个 ResponseEntity 作为回复消息的有效负载返回,而与提供的 expectedResponseType 无关。 WebFluxRequestExecutingMessageHandler 也提供了相同的选项。 有关更多信息,请参阅 HTTP 支持

文件/FTP/SFTP 更改

持久文件列表过滤器现在有一个布尔属性 forRecursion。 将此属性设置为 true 也会设置 alwaysAcceptDirectories,这意味着出站网关(lsmget)上的递归操作现在每次都会遍历完整的目录树。 这是为了解决目录树深处的变化未被检测到的问题。 此外,forRecursion=true 导致文件的完整路径用作元数据存储键;这解决了当具有相同名称的文件在不同目录中多次出现时过滤器无法正常工作的问题。 IMPORTANT: 这意味着在持久元数据存储中,顶层目录下的文件将找不到现有键。 因此,该属性默认为 false;这可能会在将来的版本中更改。

FileInboundChannelAdapterSpec 现在有一个方便的 recursive(boolean) 选项,而不是要求显式引用 RecursiveDirectoryScanner

remoteDirectoryExpression 现在可以方便地用于 mv 命令。

MongoDb 更改

MongoDbMessageSourceSpec 已添加到 MongoDd Java DSL 中。 update 选项现在在 MongoDbMessageSourceReactiveMongoDbMessageSource 实现上都已公开。

有关更多信息,请参阅 MongoDb 支持

WebSockets 更改

基于 ServerWebSocketContainer 的 WebSocket 通道适配器现在可以在运行时注册和删除。

有关更多信息,请参阅 WebSockets 支持

JPA 更改

JpaOutboundGateway 现在支持 PersistMode.DELETEIterable 消息负载。

有关更多信息,请参阅 出站通道适配器

网关更改

以前,在使用 XML 配置时,@Gateway.payloadExpression 对于无参数方法会被忽略。 存在一个可能的重大更改——如果方法同时用 @Payload@Gateway(带有不同的表达式)注解,以前会应用 @Payload,现在会应用 @Gateway.payloadExpression。 有关更多信息,请参阅 使用注解和 XML 的网关配置调用无参数方法