4.1 和 4.2 之间的变化
新组件
4.2 版本增加了一些新组件。
主要管理/JMX 重构
我们增加了一个新的 MetricsFactory 策略接口。
这一变化,连同 JMX 和管理基础设施中的其他变化,提供了对管理配置和运行时性能的更多控制。
然而,这对于(某些)用户环境有一些重要的影响。
MongoDB 元数据存储
MongoDbMetadataStore 现已可用。
有关更多信息,请参阅 MongoDB 元数据存储。
SecuredChannel 注解
我们引入了 @SecuredChannel 注解,取代了已弃用的 ChannelSecurityInterceptorFactoryBean。
有关更多信息,请参阅 Spring Integration 中的安全性。
SecurityContext 传播
我们引入了 SecurityContextPropagationChannelInterceptor,用于将 SecurityContext 从一个消息流的线程传播到另一个线程。
有关更多信息,请参阅 Spring Integration 中的安全性。
FileSplitter
在 4.1.2 中,我们添加了 FileSplitter,它将文本文件分割成行。
它现在在 int-file: 命名空间中具有完整的支持。
有关更多信息,请参阅 文件分割器。
Zookeeper 支持
我们向框架添加了 Zookeeper 支持,以帮助在集群或多主机环境中运行时。 此更改影响以下功能:
-
ZookeeperMetadataStore -
ZookeeperLockRegistry -
Zookeeper 领导权
有关更多信息,请参阅 Zookeeper 支持。
线程屏障
一个新的线程 <int:barrier/> 组件可用,允许线程暂停,直到某个异步事件发生。
有关更多信息,请参阅 线程屏障。
STOMP 支持
我们向框架添加了 STOMP 支持,作为入站和出站通道适配器对。 有关更多信息,请参阅 STOMP 支持。
编解码器
引入了一个新的 Codec 抽象,用于将对象编码和解码为 byte[]。
我们添加了一个使用 Kryo 的实现。
我们还添加了基于编解码器的转换器和消息转换器。
有关更多信息,请参阅 编解码器。
消息 PreparedStatement Setter
JdbcMessageHandler (<int-jdbc:outbound-gateway> 和 <int-jdbc:outbound-channel-adapter>) 现已提供一个新的 MessagePreparedStatementSetter 函数式接口回调,作为使用 SqlParameterSourceFactory 在 PreparedStatement 上使用 requestMessage 上下文填充参数的替代方案。
有关更多信息,请参阅 出站通道适配器。
一般性更改
本节描述了从版本 4.1 到版本 4.2 的一般性更改。
文件更改
有关这些更改的更多信息,请参阅 文件支持。
类包更改
我们将 ScatterGatherHandler 类从 org.springframework.integration.handler 移至 org.springframework.integration.scattergather。
TCP 更改
本节描述了 Spring Integration TCP 功能的一般更改。
TCP 序列化器
TCP Serializers 不再 flush() OutputStream。
这现在由 TcpNxxConnection 类完成。
如果您在代码中直接使用序列化器,您可能需要 flush() OutputStream。
服务器套接字异常
每当 TCP 服务器套接字上发生意外异常时,现在都会发布 TcpConnectionServerExceptionEvent 实例(也添加到 4.1.3 和 4.0.7)。
有关更多信息,请参阅 x4.2-tcp-events。
TCP 服务器端口
如果您将 TCP 服务器套接字工厂配置为侦听随机端口,您现在可以使用 getPort() 获取操作系统选择的实际端口。
getServerSocketAddress() 也可用。
有关更多信息,请参阅 "TCP 连接工厂"。
TCP 网关远程超时
TcpOutboundGateway 现在支持 remote-timeout-expression 作为现有 remote-timeout 属性的替代方案。
这允许根据每条消息设置超时。
此外,remote-timeout 不再默认为与 reply-timeout 相同的值,后者具有完全不同的含义。
有关更多信息,请参阅 .TCP 出站网关属性。
TCP SSLSession 可用于头部映射
TcpConnection 实现现在支持 getSslSession(),允许您从会话中提取信息以添加到消息头。
有关更多信息,请参阅 IP 消息头。
TCP 事件
每当发生关联异常时(例如向不存在的套接字发送消息),现在都会发布新事件。
TcpConnectionEventListeningMessageProducer 已弃用。
请改用通用事件适配器。
有关更多信息,请参阅 x4.2-tcp-events。
@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 出站网关中的回复监听器配置为按需初始化并在空闲一段时间后停止,而不是由网关的生命周期控制。 有关更多信息,请参阅 出站网关。
默认确认模式
当使用隐式定义的 DefaultMessageListenerContainer 时,默认的 acknowledge 现在是 transacted。
我们建议在使用此容器时使用 transacted,以避免消息丢失。
此默认值现在适用于消息驱动的入站适配器和入站网关。
它已经是 JMS 支持的通道的默认值。
共享订阅
我们为消息驱动端点和 <int-jms:publish-subscribe-channel> 添加了对共享订阅(JMS 2.0)的命名空间支持。
以前,您必须将监听器容器连接为 <bean/> 声明才能使用共享连接。
有关更多信息,请参阅 JMS 支持。
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 属性,以允许对回复 RabbitTemplate 的外部 bean 进行更多控制。
您还可以提供自己的 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 入站网关,以便在请求超时时返回您指定的 status code。
默认值现在是 500 Internal Server Error,而不是 200 OK。
有关更多信息,请参阅 响应状态码。
表单数据
我们添加了代理 multipart/form-data 请求的文档。
有关更多信息,请参阅 HTTP 支持。
网关更改
本节描述了 Spring Integration 网关功能的一般更改。
[[gateway-methods-can-return-completablefuture<?>]]
==== 网关方法可以返回 CompletableFuture<?>
当使用 Java 8 时,网关方法现在可以返回 CompletableFuture<?>。
有关更多信息,请参阅 CompletableFuture。
MessagingGateway 注解
请求和回复超时属性现在是 String 而不是 Long,以允许使用属性占位符或 SpEL 进行配置。
请参阅 @MessagingGateway 注解。
聚合器更改
本节描述了 Spring Integration 聚合器功能的一般更改。
聚合器性能
此版本包含对聚合组件(聚合器、重排序器等)的一些性能改进,通过更有效地从组中删除已释放的消息。
已向消息存储中添加了新方法 (removeMessagesFromGroup)。
设置 removeBatchSize 属性(默认值:100)以调整每次操作中删除的消息数量。
目前,JDBC、Redis 和 MongoDB 消息存储支持此属性。
输出消息组处理器
当使用 ref 或内部 bean 作为聚合器时,您现在可以直接绑定 MessageGroupProcessor。
此外,我们添加了一个 SimpleMessageGroupProcessor,它返回组中的消息集合。
当输出处理器生成 Message<?> 集合时,聚合器会单独释放这些消息。
配置 SimpleMessageGroupProcessor 会使聚合器成为消息屏障,其中消息会一直保持,直到它们全部到达,然后才单独释放。
有关更多信息,请参阅 聚合器。
FTP 和 SFTP 更改
本节描述了 Spring Integration FTP 和 SFTP 功能的一般更改。
入站通道适配器
您现在可以在入站通道适配器上指定 remote-directory-expression,以在运行时确定目录。
有关更多信息,请参阅 FTP/FTPS 适配器 和 SFTP 适配器。
默认 Sftp 会话工厂
以前,DefaultSftpSessionFactory 无条件地允许连接到未知主机。
这现在是可配置的(默认值:false)。
除非 allowUnknownKeys 属性为 true(默认值:false),否则工厂现在需要一个配置的 knownHosts 文件。
消息会话回调
我们引入了 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 支持。