4.2 和 4.3 之间的更改
新组件
版本 4.3 添加了许多新的组件。
AMQP 异步 outbound 网关
参见 异步向外网关。
MessageGroupFactory
我们引入了 MessageGroupFactory
策略,以允许控制 MessageGroupStore
逻辑中的 MessageGroup
实例。我们为 SimpleMessageGroup
添加了 SimpleMessageGroupFactory
实现,并将 GroupType.HASH_SET
作为标准 MessageGroupStore
实现的默认工厂。更多信息请参见 消息存储。
PersistentMessageGroup
我们为持久化的 MessageGroupStore
实例添加了 PersistentMessageGroup
(懒加载代理)实现,当它们的 lazyLoadMessageGroups
为 true
(默认值)时,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
。
异步服务激活器
我们添加了一个选项,使服务激活器可以是同步的。更多信息请参见异步服务激活器。
消息注解支持变更
邮件更改
本节描述了对 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-expression
和 socket-expression
属性。更多信息请参见 UDP 适配器。
流反序列化器
各种反序列化器现在支持将原始缓冲区池化,而不是为每条消息创建和丢弃一个缓冲区,这些反序列化器只有在整条消息组装完成后才能分配最终缓冲区。更多信息请参见 TCP 连接工厂。
TCP 消息映射器
消息映射器现在可以选择性地设置配置的内容类型头。有关更多信息,请参见 IP 消息头。
文件更改
此部分描述了对 Spring Integration File 功能的常规更改。
目标目录创建
FileWritingMessageHandler
生成的文件名可以表示一个子路径,以在目标目录中保存所需的文件目录结构。更多信息,请参见 生成文件名。
FileReadingMessageSource
现在将 WatchService
目录扫描逻辑隐藏在内部类中。我们添加了 use-watch-service
和 watch-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 端点现在支持配置了 ContentTypeDelegatingMessageConverter
的 RabbitTemplate
,因此你可以根据消息内容类型选择转换器。更多信息,请参见 出境消息转换。
延迟消息处理的标题
Spring AMQP 1.6 增加了对 延迟消息交换 的支持。Header 映射现在支持此功能使用的头部 (amqp_delay
和 amqp_receivedDelay
)。
AMQP 支持的通道
AMQP 支持的通道现在支持消息映射。更多信息请参见 AMQP 支持的消息通道。
Redis 更改
本节描述了对 Spring Integration Redis 功能的常规更改。
[[list-push/pop-direction]] ==== 列表推入/弹出方向
之前,队列通道适配器总是以固定的方向使用 Redis 列表,即向左端推送并在右端读取。现在,您可以分别使用 RedisQueueMessageDrivenEndpoint
和 RedisQueueOutboundChannelAdapter
的 rightPop
和 leftPush
选项来配置读取和写入方向。更多信息,请参见 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 网关(用于 put
和 mput
命令)和 SFTP outbound 通道适配器现在支持 chmod
属性,用于在上传后更改远程文件权限。更多信息请参见 SFTP Outbound Channel Adapter 和 SFTP Outbound Gateway。
FTP 更改
本节描述了对 Spring Integration FTP 功能的通用更改。
会话更改
FtpSession
现在支持 list()
和 listNames()
方法中的 null
,因为底层的 FTP 客户端可以使用它。因此,你现在可以在不使用 remoteDirectory
表达式的情况下配置 FtpOutboundGateway
。你也可以在不使用 remote-directory
或 remote-directory-expression
的情况下配置 <int-ftp:inbound-channel-adapter>
。更多信息请参见 FTP/FTPS 适配器。
Router 更改
ErrorMessageExceptionTypeRouter
现在支持 Exception
超类映射,以避免在多个继承者的情况下为同一通道产生重复。为此,ErrorMessageExceptionTypeRouter
在初始化期间加载映射类,以便在出现 ClassNotFoundException
时快速失败。
更多信息请参见 路由器。
标头映射
本节描述了 4.2 版和 4.3 版之间标题映射的变化。
通用
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 支持。