跳到主要内容

4.2 和 4.3 之间的更改

QWen Plus 中英对照 Changes between 4.2 and 4.3

请参阅 迁移指南 以了解可能影响您应用程序的重要更改。您可以在 Wiki 上找到从 2.1 版本开始的所有版本的迁移指南。

新组件

版本 4.3 添加了许多新的组件。

AMQP 异步 outbound 网关

MessageGroupFactory

我们引入了 MessageGroupFactory 策略,以允许控制 MessageGroupStore 逻辑中的 MessageGroup 实例。我们为 SimpleMessageGroup 添加了 SimpleMessageGroupFactory 实现,并将 GroupType.HASH_SET 作为标准 MessageGroupStore 实现的默认工厂。更多信息请参见 消息存储

PersistentMessageGroup

我们为持久化的 MessageGroupStore 实例添加了 PersistentMessageGroup(懒加载代理)实现,当它们的 lazyLoadMessageGroupstrue(默认值)时,getMessageGroup() 会返回此实例。更多信息请参见 消息存储

FTP 和 SFTP 流式传入通道适配器

我们添加了传入通道适配器,这些适配器为每个文件返回一个 InputStream ,让您可以在不将远程文件写入本地文件系统的情况下检索它们。有关更多信息,请参阅 FTP 流式传输传入通道适配器SFTP 流式传输传入通道适配器

StreamTransformer

我们添加了 StreamTransformer 以将 InputStream 负载转换为 byte[]String。更多信息请参见 Stream Transformer

集成图

我们添加了 IntegrationGraphServer,连同 IntegrationGraphController REST 服务,以图形形式公开 Spring Integration 应用程序的运行时模型。有关更多信息,请参阅 集成图

JDBC 锁注册表

我们添加了 JdbcLockRegistry 用于通过数据库表共享的分布式锁。更多信息请参见 JDBC 锁注册表

LeaderInitiator 用于 LockRegistry

我们基于 LockRegistry 策略添加了 LeaderInitiator 实现。更多信息,请参见 领导权事件处理

通用更改

此部分描述了版本 4.3 为 Spring Integration 带来的一般性更改。

核心更改

本节描述了对 Spring Integration 核心进行的通用更改。

链中的出站网关

以前,你可以在链中的出站网关上指定 reply-channel。它会被完全忽略。网关的回复会发送到下一个链元素,或者如果网关是最后一个元素,则发送到链的输出通道。现在这种情况会被检测到并禁止。如果你有这样的配置,请移除 reply-channel

异步服务激活器

我们添加了一个选项,使服务激活器可以是同步的。更多信息请参见异步服务激活器

消息注解支持变更

消息注解支持不需要在类级别声明 @MessageEndpoint (或任何其他 @Component)注解。要恢复之前的行为,将 spring.integration.messagingAnnotations.require.componentAnnotation(位于 spring.integration.properties 中)设置为 true。更多信息请参见 全局属性注解支持

邮件更改

本节描述了对 Spring Integration Mail 功能的通用更改。

可定制的用户标志

可自定义的 userFlag(添加于 4.2.2 版本,用于提供对表示邮件已被查看的标志进行自定义)现在可以在 XML 命名空间中使用。更多信息请参见 当 Recent 不受支持时标记 IMAP 消息

邮件消息映射

你现在可以映射传入的邮件消息,MessageHeaders 包含邮件头,有效负载包含电子邮件内容。以前,有效负载总是原始的 MimeMessage。更多信息,请参见传入邮件消息映射

JMS 更改

本节描述了对 Spring Integration JMS 功能的通用更改。

Header 映射器

DefaultJmsHeaderMapper 现在通过调用其 toString() 方法将标准的 correlationId 头映射为消息属性。更多信息,请参阅 将消息头映射到 JMS 消息和从 JMS 消息映射

异步网关

JMS outbound 网关现在有一个 async 属性。更多信息请参见 异步网关

聚合器更改

当一个 POJO 聚合器释放一个 Message<?> 对象集合时,行为会发生变化。这种情况很少见,但是,如果您的应用程序这样做,您需要对您的 POJO 进行少量修改。有关更多信息,请参阅此重要提示:SimpleMessageGroup.getMessages() 方法返回一个不可修改的集合。 注意。

[[tcp/udp-changes]] === TCP/UDP 更改

本节描述了对 Spring Integration TCP/UDP 功能的常规更改。

事件

当服务器连接工厂启动时,会发出一个新的 TcpConnectionServerListeningEvent。更多信息,请参见 TCP 连接事件

你现在可以在 <int-ip:udp-outbound-channel-adapter> 上使用 destination-expressionsocket-expression 属性。更多信息请参见 UDP 适配器

流反序列化器

各种反序列化器现在支持将原始缓冲区池化,而不是为每条消息创建和丢弃一个缓冲区,这些反序列化器只有在整条消息组装完成后才能分配最终缓冲区。更多信息请参见 TCP 连接工厂

TCP 消息映射器

消息映射器现在可以选择性地设置配置的内容类型头。有关更多信息,请参见 IP 消息头

文件更改

此部分描述了对 Spring Integration File 功能的常规更改。

目标目录创建

FileWritingMessageHandler 生成的文件名可以表示一个子路径,以在目标目录中保存所需的文件目录结构。更多信息,请参见 生成文件名

FileReadingMessageSource 现在将 WatchService 目录扫描逻辑隐藏在内部类中。我们添加了 use-watch-servicewatch-events 选项来启用此行为。由于 API 的不一致,我们弃用了顶级的 WatchServiceDirectoryScanner 。更多信息请参见 WatchServiceDirectoryScanner

缓冲区大小

在写入文件时,你现在可以指定缓冲区大小。

追加和刷新

你现在可以在追加文件时避免刷新文件,并使用多种策略在空闲期间刷新数据。更多信息请参见在使用 APPEND_NO_FLUSH 时刷新文件

保留时间戳

你现在可以配置 outbound 通道适配器来设置目标文件的 lastmodified 时间戳。更多信息请参见文件时间戳

分割器更改

FileSplitter 现在会在文件完全读取时自动关闭 FTP 或 SFTP 会话。这适用于当出站网关返回一个 InputStream 或者当您使用新的 FTP 或 SFTP 流式通道适配器时。我们还引入了一个新的 markers-json 选项,用于将 FileSplitter.FileMarker 转换为 JSON String,以便于下游网络交互。更多信息请参见 文件拆分器

文件过滤器

我们添加了 ChainFileListFilter 作为 CompositeFileListFilter 的替代方案。更多信息请参见读取文件

AMQP 更改

本节描述了对 Spring Integration AMQP 功能的通用更改。

内容类型消息转换器

outbound 端点现在支持配置了 ContentTypeDelegatingMessageConverterRabbitTemplate,因此你可以根据消息内容类型选择转换器。更多信息,请参见 出境消息转换

延迟消息处理的标题

Spring AMQP 1.6 增加了对 延迟消息交换 的支持。Header 映射现在支持此功能使用的头部 (amqp_delayamqp_receivedDelay)。

AMQP 支持的通道

AMQP 支持的通道现在支持消息映射。更多信息请参见 AMQP 支持的消息通道

Redis 更改

本节描述了对 Spring Integration Redis 功能的常规更改。

[[list-push/pop-direction]] ==== 列表推入/弹出方向

之前,队列通道适配器总是以固定的方向使用 Redis 列表,即向左端推送并在右端读取。现在,您可以分别使用 RedisQueueMessageDrivenEndpointRedisQueueOutboundChannelAdapterrightPopleftPush 选项来配置读取和写入方向。更多信息,请参见 Redis 队列传入通道适配器Redis 队列出站通道适配器

队列传入网关默认序列化器

入站网关的默认序列化器已更改为 JdkSerializationRedisSerializer,以与出站网关兼容。更多信息,请参见 Redis 队列入站网关

HTTP 更改

以前,对于带有主体(例如 POST)但没有 content-type 标头的请求,主体将被忽略。在此次发布中,根据 RFC 2616 的建议,认为此类请求的内容类型为 application/octet-stream。更多信息,请参阅 Http 入站组件

uriVariablesExpression 现在默认使用 SimpleEvaluationContext(自 4.3.15 起)。更多信息,请参阅 映射 URI 变量

SFTP 更改

本节描述了对 Spring Integration SFTP 功能的通用更改。

工厂 Bean

我们添加了一个新的工厂bean来简化SFTP的Jsch代理配置。更多信息请参见 JschProxyFactoryBean

chmod 更改

SFTP outbound 网关(用于 putmput 命令)和 SFTP outbound 通道适配器现在支持 chmod 属性,用于在上传后更改远程文件权限。更多信息请参见 SFTP Outbound Channel AdapterSFTP Outbound Gateway

FTP 更改

本节描述了对 Spring Integration FTP 功能的通用更改。

会话更改

FtpSession 现在支持 list()listNames() 方法中的 null,因为底层的 FTP 客户端可以使用它。因此,你现在可以在不使用 remoteDirectory 表达式的情况下配置 FtpOutboundGateway。你也可以在不使用 remote-directoryremote-directory-expression 的情况下配置 <int-ftp:inbound-channel-adapter>。更多信息请参见 FTP/FTPS 适配器

Router 更改

ErrorMessageExceptionTypeRouter 现在支持 Exception 超类映射,以避免在多个继承者的情况下为同一通道产生重复。为此,ErrorMessageExceptionTypeRouter 在初始化期间加载映射类,以便在出现 ClassNotFoundException 时快速失败。

更多信息请参见 路由器

标头映射

本节描述了 4.2 版和 4.3 版之间标题映射的变化。

通用

AMQP、WS 和 XMPP 标头映射(例如 request-header-mappingreply-header-mapping)现在支持否定模式。有关更多信息,请参阅 AMQP 消息标头WS 消息标头XMPP 消息标头

AMQP 标头映射

之前,只有标准的 AMQP 标头默认被映射。您必须明确启用用户定义标头的映射。在此版本中,默认情况下所有标头都会被映射。此外,默认情况下不再映射入站的 amqp_deliveryMode 标头。有关更多信息,请参阅 AMQP 消息标头

Groovy 脚本

你现在可以使用 compile-static 提示或任何其他 CompilerConfiguration 选项来配置 Groovy 脚本。更多信息请参阅 Groovy 配置

@InboundChannelAdapter 变更

@InboundChannelAdapter 现在有一个 channel 别名属性,用于常规的 value。此外,目标 SourcePollingChannelAdapter 组件现在可以以延迟绑定的方式从提供的名称 (outputChannelName 选项) 解析目标 outputChannel bean。更多信息,请参见 注解支持

XMPP 更改

XMPP 通道适配器现在支持 XMPP 扩展 (XEP)。更多信息请参见 XMPP 扩展

WireTap 延迟绑定

WireTap ChannelInterceptor 现在可以接受一个 channelName,该名称将在第一次激活拦截器操作期间稍后解析为目标 MessageChannel。更多信息,请参见 Wire Tap

ChannelMessageStoreQueryProvider 更改

ChannelMessageStoreQueryProvider 现在支持 H2 数据库。更多信息,请参见 消息通道备份

WebSocket 更改

ServerWebSocketContainer 现在提供了一个 allowedOrigins 选项,而 SockJsServiceOptions 提供了一个 suppressCors 选项。更多信息请参见 WebSockets 支持