对于已经熟悉 Spring Integration 的人,本章简要概述了 5.5 版本的新特性。
如果您对早期版本中引入的更改和功能感兴趣,请参阅更改历史。
Spring Integration 5.5 有什么新功能?
如果您对更多详细信息感兴趣,请参阅作为 5.5 开发过程的一部分解决的问题跟踪工单。
新组件
文件聚合器
引入了 和作为组件的基于FileSplitter.FileMaker
实现。有关详细信息,请参阅文件聚合器。CorrelationStrategy
ReleaseStrategy
MessageGroupProcessor
FileAggregator
MQTT v5 支持
Mqttv5PahoMessageDrivenChannelAdapter
和Mqttv5PahoMessageHandler
(包括各自的MqttHeaderMapper
)被引入以支持 MQTT v5 协议通信。有关更多信息,请参阅MQTT v5 支持。
一般变更
所有持久化MessageGroupStore
实现都提供了streamMessagesForGroup(Object groupId)
基于目标数据库流 API 的合约。有关详细信息,请参阅消息存储。
bean(如果已integrationGlobalProperties
声明)现在必须是org.springframework.integration.context.IntegrationProperties
instead of的实例,java.util.Properties
为了向后兼容,不推荐使用该支持。spring.integration.channels.error.requireSubscribers=true
添加全局属性以指示errorChannel
必须使用选项(或不)配置全局requireSubscribers
默认值。添加全局属性以spring.integration.channels.error.ignoreFailures=true
指示全局默认值errorChannel
必须忽略(或不)调度错误并将消息传递给下一个处理程序。有关详细信息,请参阅全局属性。
(AbstractPollingEndpoint
源轮询通道适配器和轮询消费者)视为maxMessagesPerPoll == 0
跳过调用源。稍后可以将其更改为不同的值,例如通过控制总线。有关更多信息,请参阅轮询消费者。
现在ConsumerEndpointFactoryBean
接受reactiveCustomizer
Function
任何输入通道的 a 作为反应流源并在ReactiveStreamsConsumer
下面使用 a。这ConsumerEndpointSpec.reactive()
在 Java DSL 中作为一个选项和@Reactive
消息注释的嵌套注释进行了介绍。有关更多信息,请参阅反应式流支持。
对于一些细粒度的调度用例,现在可以将groupTimeoutExpression
for 相关消息处理程序(anAggregator
和)评估为 a。此外,该选项被添加到以提供针对要添加到组的消息的条件。有关详细信息,请参阅聚合器。Resequencer
java.util.Date
BiFunction groupConditionSupplier
AbstractCorrelatingMessageHandler
MessageGroup
可以为MessageGroup
抽象提供 acondition
以供稍后评估,以便为组做出决定。有关详细信息,请参阅消息组条件。
集成流组合
添加了新的IntegrationFlows.from(IntegrationFlow)
工厂方法以允许从IntegrationFlow
现有流的输出启动电流。此外,IntegrationFlowDefinition
还添加了一个to(IntegrationFlow)
终端操作符,以在其他一些流的输入通道继续当前流。有关详细信息,请参阅集成流组合。
AMQP 变更
AmqpInboundChannelAdapter
和AmqpInboundGateway
(以及相应的 Java DSL 构建器)现在支持作为org.springframework.amqp.rabbit.retry.MessageRecoverer
通用RecoveryCallback
. 有关更多信息,请参阅AMQP 支持。
Redis 变化
现在ReactiveRedisStreamMessageProducer
有所有StreamReceiver.StreamReceiverOptionsBuilder
选项的设置器,包括一个onErrorResume
函数。有关更多信息,请参阅Redis 支持。
HTTP 更改
HttpRequestExecutingMessageHandler
不再回退到application/x-java-serialized-object
内容类型,并让基于RestTemplate
提供的请求正文转换做出最终决定HttpMessageConverter
。它现在还有一个extractResponseBody
标志(true
默认情况下)来仅返回响应正文,或将整个ResponseEntity
作为回复消息有效负载返回,独立于提供的expectedResponseType
. 也为 提供了相同的选项WebFluxRequestExecutingMessageHandler
。有关详细信息,请参阅HTTP 支持。
文件/FTP/SFTP 更改
The persistent file list filters now have a boolean property forRecursion
.
Setting this property to true
, also sets alwaysAcceptDirectories
, which means that the recursive operation on the outbound gateways (ls
and mget
) will now always traverse the full directory tree each time.
This is to solve a problem where changes deep in the directory tree were not detected.
In addition, forRecursion=true
causes the full path to files to be used as the metadata store keys; this solves a problem where the filter did not work properly if a file with the same name appears multiple times in different directories.
IMPORTANT: This means that existing keys in a persistent metadata store will not be found for files beneath the top level directory.
For this reason, the property is false
by default; this may change in a future release.
现在FileInboundChannelAdapterSpec
有一个方便的recursive(boolean)
选项,而不需要显式引用RecursiveDirectoryScanner
.
为方便起见,现在remoteDirectoryExpression
可以在mv
命令中使用。
MongoDb 更改
被MongoDbMessageSourceSpec
添加到 MongoDd Java DSL 中。现在在和实现update
上都公开了一个选项。MongoDbMessageSource
ReactiveMongoDbMessageSource
有关更多信息,请参阅MongoDb 支持。
网关更改
以前,在使用 XML 配置时,@Gateway.payloadExpression
无参数方法会被忽略。有一个可能的重大变化 - 如果该方法以前用@Payload
as 和@Gateway
(用不同的表达式)注释,@Payload
则将应用 ,现在@Gateway.payloadExpression
应用 。有关更多信息,请参阅使用注释和 XML 的网关配置和调用无参数方法。