对于已经熟悉 Spring Integration 的人,本章简要概述了 5.5 版本的新特性。

如果您对早期版本中引入的更改和功能感兴趣,请参阅更改历史

Spring Integration 5.5 有什么新功能?

如果您对更多详细信息感兴趣,请参阅作为 5.5 开发过程的一部分解决的问题跟踪工单。

新组件

文件聚合器

引入了 和作为组件的基于FileSplitter.FileMaker实现。有关详细信息,请参阅文件聚合器CorrelationStrategyReleaseStrategyMessageGroupProcessorFileAggregator

MQTT v5 支持

Mqttv5PahoMessageDrivenChannelAdapterMqttv5PahoMessageHandler(包括各自的MqttHeaderMapper)被引入以支持 MQTT v5 协议通信。有关更多信息,请参阅MQTT v5 支持

一般变更

所有持久化MessageGroupStore实现都提供了streamMessagesForGroup(Object groupId)基于目标数据库流 API 的合约。有关详细信息,请参阅消息存储

bean(如果已integrationGlobalProperties声明)现在必须是org.springframework.integration.context.IntegrationPropertiesinstead 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消息注释的嵌套注释进行了介绍。有关更多信息,请参阅反应式流支持

对于一些细粒度的调度用例,现在可以将groupTimeoutExpressionfor 相关消息处理程序(anAggregator和)评估为 a。此外,该选项被添加到以提供针对要添加到组的消息的条件。有关详细信息,请参阅聚合器。Resequencerjava.util.DateBiFunction groupConditionSupplierAbstractCorrelatingMessageHandlerMessageGroup

可以为MessageGroup抽象提供 acondition以供稍后评估,以便为组做出决定。有关详细信息,请参阅消息组条件

集成流组合

添加了新的IntegrationFlows.from(IntegrationFlow)工厂方法以允许从IntegrationFlow现有流的输出启动电流。此外,IntegrationFlowDefinition还添加了一个to(IntegrationFlow)终端操作符,以在其他一些流的输入通道继续当前流。有关详细信息,请参阅集成流组合

AMQP 变更

AmqpInboundChannelAdapterAmqpInboundGateway(以及相应的 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上都公开了一个选项。MongoDbMessageSourceReactiveMongoDbMessageSource

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

WebSocket 更改

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

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

JPA 更改

现在JpaOutboundGateway支持. _IterablePersistMode.DELETE

有关详细信息,请参阅出站通道适配器

网关更改

以前,在使用 XML 配置时,@Gateway.payloadExpression无参数方法会被忽略。有一个可能的重大变化 - 如果该方法以前用@Payloadas 和@Gateway(用不同的表达式)注释,@Payload则将应用 ,现在@Gateway.payloadExpression应用 。有关更多信息,请参阅使用注释和 XML 的网关配置调用无参数方法


1. see XML Configuration