4.1 和 4.2 之间的更改
新组件
版本 4.2 添加了许多新的组件。
主要管理/JMX 重写
我们添加了一个新的 MetricsFactory
策略接口。此更改与其他 JMX 和管理基础结构中的更改一起,提供了对管理配置和运行时性能的更大控制。
但是,这对(某些)用户环境有一些重要的影响。
有关完整详细信息,请参阅 Metrics and Management 和 JMX 改进。
MongoDB 元数据存储
MongoDbMetadataStore
现已可用。有关更多信息,请参阅 MongoDB Metadata Store。
安全通道 注解
我们引入了 @SecuredChannel
注解,以取代已弃用的 ChannelSecurityInterceptorFactoryBean
。有关更多信息,请参阅Spring Integration 中的安全性。
SecurityContext
传播
我们引入了 SecurityContextPropagationChannelInterceptor
用于从一个消息流的线程传播 SecurityContext
到另一个。有关更多信息,请参阅 Spring Integration 中的安全性。
文件拆分器
在 4.1.2 中,我们添加了 FileSplitter
,它将文本文件拆分为行。它现在在 int-file:
命名空间中有完全支持。更多信息请参见文件拆分器。
Zookeeper 支持
我们在框架中添加了 Zookeeper 支持,以协助在集群或多主机环境中运行。此更改影响以下功能:
-
ZookeeperMetadataStore
-
ZookeeperLockRegistry
-
Zookeeper 领导选举
更多信息请参见 Zookeeper 支持。
线程屏障
一个新的线程 <int:barrier/>
组件可用,允许线程暂停,直到某些异步事件发生。更多信息请参见 线程屏障。
STOMP 支持
我们在框架中添加了 STOMP 支持,作为入站和出站通道适配器对。更多信息,请参阅 STOMP 支持。
编解码器
引入了一个新的 Codec
抽象,用于将对象编码和解码为 byte[]
。我们添加了一个使用 Kryo 的实现。我们还添加了基于 codec 的转换器和消息转换器。更多信息请参见 Codec。
消息 PreparedStatement 设置器
一个新的 MessagePreparedStatementSetter
函数式接口回调可用于 JdbcMessageHandler
(<int-jdbc:outbound-gateway>
和 <int-jdbc:outbound-channel-adapter>
),作为使用 SqlParameterSourceFactory
根据 requestMessage
上下文填充 PreparedStatement
参数的替代方案。更多信息请参阅 输出通道适配器。
通用更改
此部分描述了从版本 4.1 到版本 4.2 的一般性更改。
WireTap
作为现有的 selector
属性的替代方案,<wire-tap/>
元素现在支持 selector-expression
属性。
文件更改
有关这些更改的更多信息,请参阅 文件支持。
追加新行
<int-file:outbound-channel-adapter>
和 <int-file:outbound-gateway>
现在支持一个 append-new-line
属性。如果设置为 true
,在消息写入后会向文件中添加一个新行。默认属性值是 false
。
忽略隐藏文件
我们为 <int-file:inbound-channel-adapter>
添加了 ignore-hidden
属性,以便您可以设置是否从源目录中拾取隐藏文件。它的默认值为 true
。
编写 InputStream
负载
FileWritingMessageHandler
现在也接受 InputStream
作为有效的消息有效载荷类型。
HeadDirectoryScanner
你现在可以将 HeadDirectoryScanner
与其他 FileListFilter
实现一起使用。
最后修改过滤器
我们添加了 LastModifiedFileListFilter
。
监视服务目录扫描器
我们添加了 WatchServiceDirectoryScanner
。
持久文件列表筛选器更改
AbstractPersistentFileListFilter
有一个新属性 (flushOnUpdate
),当设置为 true
时,如果元数据存储实现了 Flushable
(例如 PropertiesPersistingMetadataStore
),则会调用其上的 flush()
方法。
类包更改
我们将 ScatterGatherHandler
类从 org.springframework.integration.handler
移动到 org.springframework.integration.scattergather
。
TCP 更改
本节描述了对 Spring Integration TCP 功能的常规更改。
TCP 序列化器
TCP Serializers
不再 flush()
OutputStream
。这现在是由 TcpNxxConnection
类完成的。如果你在代码中直接使用这些序列化程序,你可能需要 flush()
OutputStream
。
服务器套接字异常
TcpConnectionServerExceptionEvent
实例现在会在 TCP 服务器套接字上发生意外异常时发布(也添加到 4.1.3 和 4.0.7)。更多信息,请参阅 TCP 连接事件。
TCP 服务器端口
如果你配置了一个 TCP 服务器套接字工厂以监听一个随机端口,你现在可以通过使用 getPort()
来获取操作系统实际选择的端口。getServerSocketAddress()
也可以使用。
更多信息请参见 “TCP 连接工厂” 。
TCP 网关远程超时
TcpOutboundGateway
现在支持 remote-timeout-expression
,作为现有的 remote-timeout
属性的替代方案。这允许根据每个消息设置超时。
另外,remote-timeout
不再默认为与 reply-timeout
相同的值,这两个参数具有完全不同的含义。
有关更多信息,请参见 .TCP 外发网关属性。
TCP SSL 会话可用于标头映射
TcpConnection
实现现在支持 getSslSession()
,让你可以从会话中提取信息并添加到消息头中。更多信息,请参见 IP 消息头。
TCP 事件
现在每当发生关联异常时都会发布新的事件——例如向不存在的 socket 发送消息。
TcpConnectionEventListeningMessageProducer
已弃用。请改用通用事件适配器。
更多信息请参见 TCP 连接事件。
@InboundChannelAdapter
更改
之前,入站通道适配器上的 @Poller
将 maxMessagesPerPoll
属性默认设置为 -1
(无限)。这与 <inbound-channel-adapter/>
的 XML 配置不一致,后者默认为 1
。现在该注解将此属性默认设置为 1
。
API 变更
o.s.integration.util.FunctionIterator
现在需要一个 o.s.integration.util.Function
,而不是 reactor.function.Function
。这样做是为了去除对 Reactor 的不必要的强依赖。任何使用此迭代器的地方都需要更改导入。
Reactor 仍然支持诸如 Promise
网关等功能。对于不需要它的用户,依赖项已被移除。
JMS 更改
本节描述了对 Spring Integration TCP 功能的通用更改。
回复监听器惰性初始化
你现在可以配置 JMS 外发网关中的回复监听器按需初始化,并在空闲一段时间后停止,而不是由网关的生命周期控制。更多信息请参见 外发网关。
消息驱动端点中的转换错误
现在使用 error-channel
来处理转换错误。在以前的版本中,这些错误会导致事务回滚和消息重新投递。
更多信息请参见 Message-driven Channel Adapter 和 入站网关。
默认确认模式
当使用隐式定义的 DefaultMessageListenerContainer
时,默认的 acknowledge
现在是 transacted
。我们建议在使用此容器时使用 transacted
,以避免消息丢失。此默认设置现在适用于消息驱动的入站适配器和入站网关。对于 JMS 支持的通道,这已经是默认设置。
更多信息请参见 Message-driven Channel Adapter 和 入站网关。
共享订阅
我们为消息驱动的端点和 <int-jms:publish-subscribe-channel>
添加了对共享订阅 (JMS 2.0) 的命名空间支持。以前,您必须将监听器容器作为 <bean/>
声明进行连接,以使用共享连接。
详见 JMS 支持 获取更多信息。
条件轮询器
我们现在为动态轮询提供了更大的灵活性。
有关更多信息,请参阅 4.2 节 条件轮询器用于消息源。
AMQP 更改
本节描述了对 Spring Integration AMQP 功能的通用更改。
发布者确认
<int-amqp:outbound-gateway>
现在支持 confirm-correlation-expression
、confirm-ack-channel
和 confirm-nack-channel
属性(其目的与 <int-amqp:outbound-channel-adapter>
类似)。
相关数据
对于出站通道适配器和入站网关,如果关联数据是一个 Message<?>
,它将成为 ack 或 nack 通道上消息的基础,并添加额外的头信息。以前,任何关联数据(包括 Message<?>
)都会作为 ack 或 nack 消息的有效负载返回。
入站网关属性
<int-amqp:inbound-gateway>
现在暴露了 amqp-template
属性,以允许对外部 bean 的回复 RabbitTemplate
进行更多控制。你也可以提供自己的 AmqpTemplate
实现。此外,如果请求消息没有 replyTo
属性,你可以使用 default-reply-to
。
有关更多信息,请参阅 AMQP 支持。
XPath 分割器改进
XPathMessageSplitter
(<int-xml:xpath-splitter>
) 现在允许配置内部 javax.xml.transform.Transformer
的 output-properties
,并支持 XPath 评估 org.w3c.dom.NodeList
结果的 Iterator
模式(默认为 true
)。
更多信息请参见 拆分 XML 消息。
HTTP 变化
本节描述了对 Spring Integration HTTP 功能的常规更改。
CORS
HTTP 入站端点 (<int-http:inbound-channel-adapter>
和 <int-http:inbound-gateway>
) 现在允许配置跨源资源共享 (CORS)。
有关更多信息,请参阅 跨域资源共享 (CORS) 支持。
入站网关超时
你可以配置 HTTP 入站网关以返回你在请求超时时指定的状态码。默认值现在是 500 Internal Server Error
而不是 200 OK
。
更多信息请参见 响应状态码。
表单数据
我们添加了关于代理 multipart/form-data
请求的文档。更多信息请参见 HTTP 支持。
网关更改
本节描述了对 Spring Integration Gateway 功能的通用更改。
[[gateway-methods-can-return-completablefuture<?>]] ==== 网关方法可以返回 CompletableFuture<?>
当使用 Java 8 时,网关方法现在可以返回 CompletableFuture<?>
。更多信息请参见 CompletableFuture。
MessagingGateway 注解
请求和回复的超时属性现在是 String
类型而不是 Long
类型,以允许使用属性占位符或 SpEL 进行配置。参见 @MessagingGateway 注解。
聚合器更改
本节描述了对 Spring Integration 聚合器功能的通用更改。
聚合器性能
此版本包含一些针对聚合组件(aggregator、resequencer 等)的性能改进,通过更高效地在消息释放时将其从组中移除。消息存储中新添加了 removeMessagesFromGroup
方法。设置 removeBatchSize
属性(默认值:100
)以调整每次操作中删除的消息数量。目前,JDBC、Redis 和 MongoDB 消息存储支持此属性。
输出消息组处理器
当使用 ref
或内部 bean 作为聚合器时,您现在可以直接绑定一个 MessageGroupProcessor
。此外,我们添加了一个 SimpleMessageGroupProcessor
,它返回组中的消息集合。当输出处理器生成一个 Message<?>
的集合时,聚合器会单独释放这些消息。配置 SimpleMessageGroupProcessor
可以使聚合器成为一个消息屏障,消息会被保留直到它们全部到达,然后被单独释放。更多信息请参见 Aggregator。
FTP 和 SFTP 更改
本节描述了对 Spring Integration FTP 和 SFTP 功能的常规更改。
入站通道适配器
你现在可以在入站通道适配器上指定 remote-directory-expression
,以在运行时确定目录。更多信息请参见 FTP/FTPS 适配器 和 SFTP 适配器。
网关部分结果
委托会话工厂
我们添加了一个委托会话工厂,启用根据某些线程上下文值选择特定会话工厂的功能。
默认 Sftp 会话工厂
以前,DefaultSftpSessionFactory
无条件允许连接到未知主机。现在这可以配置(默认值:false
)。
工厂现在要求配置 knownHosts
文件,除非 allowUnknownKeys
属性为 true
(默认值:false
)。
消息会话回调
我们引入了 MessageSessionCallback<F, T>
,以便在 <int-(s)ftp:outbound-gateway/>
中使用 requestMessage
上下文执行任何自定义的 Session
操作。
详见 使用 MessageSessionCallback 和 MessageSessionCallback 了解更多信息。
Websocket 变更
我们为 ServerWebSocketContainer
添加了 WebSocketHandlerDecoratorFactory
支持,以允许对内部的 WebSocketHandler
进行链式自定义。更多信息,请参见 WebSockets 命名空间支持。
应用程序事件适配器更改
ApplicationEvent
适配器现在可以将 payload
作为 event
进行操作,从而直接允许省略自定义 ApplicationEvent
扩展。为此,在 <int-event:outbound-channel-adapter>
上引入了 publish-payload
布尔属性。更多信息请参见 Spring ApplicationEvent 支持。