跳到主要内容

4.1 和 4.2 之间的更改

QWen Plus 中英对照 Changes between 4.1 and 4.2

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

新组件

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

主要管理/JMX 重写

我们添加了一个新的 MetricsFactory 策略接口。此更改与其他 JMX 和管理基础结构中的更改一起,提供了对管理配置和运行时性能的更大控制。

但是,这对(某些)用户环境有一些重要的影响。

有关完整详细信息,请参阅 Metrics and ManagementJMX 改进

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 更改

之前,入站通道适配器上的 @PollermaxMessagesPerPoll 属性默认设置为 -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-expressionconfirm-ack-channelconfirm-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.Transformeroutput-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 适配器

网关部分结果

当你使用 FTP 或 SFTP 外发网关对多个文件进行操作(使用 mgetmput)时,在请求部分完成后可能会发生异常。如果发生这种情况,会抛出包含部分结果的 PartialSuccessException。更多信息请参见 FTP 外发网关SFTP 外发网关

委托会话工厂

我们添加了一个委托会话工厂,启用根据某些线程上下文值选择特定会话工厂的功能。

更多信息请参见 委托会话工厂委托会话工厂

默认 Sftp 会话工厂

以前,DefaultSftpSessionFactory 无条件允许连接到未知主机。现在这可以配置(默认值:false)。

工厂现在要求配置 knownHosts 文件,除非 allowUnknownKeys 属性为 true(默认值:false)。

消息会话回调

我们引入了 MessageSessionCallback<F, T>,以便在 <int-(s)ftp:outbound-gateway/> 中使用 requestMessage 上下文执行任何自定义的 Session 操作。

详见 使用 MessageSessionCallbackMessageSessionCallback 了解更多信息。

Websocket 变更

我们为 ServerWebSocketContainer 添加了 WebSocketHandlerDecoratorFactory 支持,以允许对内部的 WebSocketHandler 进行链式自定义。更多信息,请参见 WebSockets 命名空间支持

应用程序事件适配器更改

ApplicationEvent 适配器现在可以将 payload 作为 event 进行操作,从而直接允许省略自定义 ApplicationEvent 扩展。为此,在 <int-event:outbound-channel-adapter> 上引入了 publish-payload 布尔属性。更多信息请参见 Spring ApplicationEvent 支持