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 视为跳过调用源。以后可以通过 Control Bus 等方式更改为不同的值。更多信息请参阅 轮询消费者。
ConsumerEndpointFactoryBean 现在接受一个 reactiveCustomizer Function,将任何输入通道作为响应式流源,并在底层使用 ReactiveStreamsConsumer。这在 Java DSL 中作为 ConsumerEndpointSpec.reactive() 选项,以及在消息传递注解中作为 @Reactive 嵌套注解进行了介绍。更多信息请参阅 响应式流支持。
关联消息处理器(Aggregator 和 Resequencer)的 groupTimeoutExpression 现在可以评估为 java.util.Date,以实现一些细粒度的调度用例。此外,BiFunction groupConditionSupplier 选项已添加到 AbstractCorrelatingMessageHandler 中,以提供针对要添加到组中的消息的 MessageGroup 条件。更多信息请参阅 聚合器。
MessageGroup 抽象可以附带一个 condition,以便稍后评估以对该组做出决策。更多信息请参阅 消息组条件。
集成流组合
新增了 IntegrationFlows.from(IntegrationFlow) 工厂方法,允许从现有流的输出开始当前的 IntegrationFlow。此外,IntegrationFlowDefinition 添加了 to(IntegrationFlow) 终端操作符,以在其他流的输入通道处继续当前流。更多信息请参阅 集成流组合。
AMQP 更改
AmqpInboundChannelAdapter 和 AmqpInboundGateway(以及相应的 Java DSL 构建器)现在支持 org.springframework.amqp.rabbit.retry.MessageRecoverer 作为通用 RecoveryCallback 的 AMQP 特定替代方案。更多信息请参阅 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。
remoteDirectoryExpression 现在可以在 mv 命令中使用,以提供便利。
MongoDb 更改
MongoDbMessageSourceSpec 已添加到 MongoDd Java DSL 中。update 选项现在在 MongoDbMessageSource 和 ReactiveMongoDbMessageSource 实现上都已公开。
更多信息请参阅 MongoDb 支持。
WebSockets 更改
基于 ServerWebSocketContainer 的 WebSocket 通道适配器现在可以在运行时注册和移除。
更多信息请参阅 WebSockets 支持。
JPA 更改
JpaOutboundGateway 现在支持 PersistMode.DELETE 的 Iterable 消息负载。
更多信息请参阅 出站通道适配器。
网关更改
此前,在使用 XML 配置时,对于无参数方法,@Gateway.payloadExpression 会被忽略。存在一个潜在的破坏性更改——如果方法同时使用 @Payload 和 @Gateway(带有不同的表达式)进行注解,之前会应用 @Payload,现在则应用 @Gateway.payloadExpression。更多信息请参阅 使用注解和 XML 进行网关配置 和 调用无参数方法。