# 变更历史 ## 变更历史 ### 5.3 和 5.4 之间的变化 ### 新组件 #### 用于 Apache Kafka 的通道适配器 独立的[Spring Integration for Apache Kafka](https://projects.spring.io/spring-integration-kafka/)项目已合并为该项目的`spring-integration-kafka`模块。 `KafkaProducerMessageHandler``sendTimeoutExpression`默认值已更改。 现在可以访问底层`send()`操作的`Future`。 有关更多信息,请参见[Spring for Apache Kafka Support](./kafka.html#kafka)。 #### R2DBC 通道适配器 介绍了用于 R2DBC 数据库交互的通道适配器。有关更多信息,请参见[R2DBC 支持](./r2dbc.html#r2dbc)。 #### Redis 流支持 Redis 流支持的通道适配器已经引入。有关更多信息,请参见[Redis 流出站通道适配器](./redis.html#redis-stream-outbound)。 #### 可更新锁定注册中心 引入了一个可更新的锁注册中心,以允许对分布式锁进行更新租赁。有关更多信息,请参见[JDBC 实现](./jdbc.html#jdbc-lock-registry)。 #### zeromq 支持 已经引入了`ZeroMqChannel`、`ZeroMqMessageHandler`和`ZeroMqMessageProducer`。有关更多信息,请参见[ZeroMQ 支持](./zeromq.html#zeromq)。 ### 一般变化 单向消息传递网关(`void`方法返回类型)现在将`nullChannel`显式地设置到`replyChannel`头中,以忽略任何可能的下游回复。有关更多信息,请参见[设置默认回复通道](./gateway.html#gateway-default-reply-channel)。 另外,网关方法调用者(`GatewayProxyFactoryBean.MethodInvocationGateway`)现在提供了托管 Bean 名称,作为网关代理 Bean 名称加上方法签名的组合。例如:`sampleGateway#echo(String)`。这会影响为网关方法调用公开的消息历史和度量,还会在应用程序上下文的启动和关闭期间提供细粒度的日志。 聚合器(和 Resequencer)现在可以使孤立的组(在持久存储中的组)过期,在应用程序重新启动后,不会有新消息到达该存储)。有关更多信息,请参见[聚合器到期的组](./aggregator.html#aggregator-expiring-groups)。 被千分尺取代的传统度量标准已被删除。 [螺纹屏障](./barrier.html#barrier)现在有两个独立的超时选项:`requestTimeout`和`triggerTimeout`。 ### TCP/UDP 更改 连接工厂现在支持多个发送组件(`TcpSender`);它们仍然限于一个接收组件(`TcpListener`)。例如,这允许入站网关和出站通道适配器共享相同的工厂,支持从服务器到客户机的请求/回复和任意消息传递。除非使用一次性连接或`ThreadAffinityClientConnectionFactory`,否则不应将共享工厂与出站网关一起使用。有关更多信息,请参见[协作通道适配器](./ip.html#ip-collaborating-adapters)和[TCP 网关](./ip.html#tcp-gateways)。 现在可以将 UDP 通道适配器配置为`SocketCustomizer`,这允许设置适配器不直接支持的套接字属性。有关更多信息,请参见[UDP 适配器](./ip.html#udp-adapters)。 ### RMI 变化 `spring-integration-rmi`模块不推荐使用,不提供替换,并将在下一个主要版本中删除。有关更多信息,请参见[RMI 支助](./rmi.html#rmi)。 ### AMQP 变化 出站端点现在有了处理发布服务器确认和返回的新机制。有关更多信息,请参见[发布服务器确认和返回的替代机制](./amqp.html#alternative-confirms-returns)。 新的`BatchMode.EXTRACT_PAYLOAD_WITH_HEADERS`由`AmqpInboundChannelAdapter`支持。有关更多信息,请参见[入站通道适配器](./amqp.html#amqp-inbound-channel-adapter)。 ### 邮件更改 `AbstractMailReceiver`现在可以生成`MimeMessage`as-is,而无需急于获取其内容。有关更多信息,请参见[邮件接收通道适配器](./mail.html#mail-inbound)。 ### 5.2 与 5.3 之间的变化 ### 新组件 #### 集成模式 引入了`IntegrationPattern`抽象,以指示哪个 Enterprise 集成模式(an`IntegrationPatternType`)和类别 A Spring 集成组件属于哪个。有关此抽象及其用例的更多信息,请参见其 Javadocs 和[积分图](./graph.html#integration-graph)。 #### `ReactiveMessageHandler` 现在框架中原生支持`ReactiveMessageHandler`。有关更多信息,请参见[reactiveMessageHandler](./reactive-streams.html#reactive-message-handler)。 #### `ReactiveMessageSourceProducer` `ReactiveMessageSourceProducer`是`MessageProducerSupport`的一个反应性实现,用于将所提供的`MessageSource`封装到`Flux`中,用于按需`receive()`调用。有关更多信息,请参见[反应流支持](./reactive-streams.html#reactive-streams)。 #### Java DSL 扩展 引入了一个新的`IntegrationFlowExtension`API,允许使用定制或组合的 EIP 操作符扩展现有的 Java DSL。这也可以用于为任何开箱即用的`IntegrationComponentSpec`扩展引入自定义程序。有关更多信息,请参见[DSL 扩展](./dsl.html#java-dsl-extensions)。 #### Kotlin dsl Kotlin 介绍了用于集成流配置的 DSL。有关更多信息,请参见[Kotlin DSL Chapter](./kotlin-dsl.html#kotlin-dsl)。 #### reactiverequesthandleradvice 提供了一个`ReactiveRequestHandlerAdvice`来自定义消息处理程序的`Mono`回复。有关更多信息,请参见[反应性建议](./handler-advice.html#reactive-advice)。 #### 处理 MessageAdviceAdapter 提供了一个`HandleMessageAdviceAdapter`来包装任何`MethodInterceptor`,用于在`MessageHandler.handleMessage()`上应用,而不是默认的`AbstractReplyProducingMessageHandler.RequestHandler.handleRequestMessage()`行为。有关更多信息,请参见[处理消息建议](./handler-advice.html#handle-message-advice)。 #### MongoDB 反应通道适配器 `spring-integration-mongodb`模块现在为 Spring 数据中的反应式 MongoDB 驱动程序支持提供通道适配器实现。另外,对于 MongoDB 变更流支持的一个反应性实现存在于`MongoDbChangeStreamMessageProducer`中。有关更多信息,请参见[MongoDB 支持](./mongodb.html#mongodb)。 #### 收到邮件通知 一个特殊的`ReceiveMessageAdvice`已被引入到代理中,正好是`MessageSource.receive()`或`PollableChannel.receive()`。有关更多信息,请参见[智能轮询](./polling-consumer.html#smart-polling)。 ### 一般更改 Gateway Proxy 现在默认不代理`default`方法。有关更多信息,请参见[调用`default`方法]。 内部组件(例如`_org.springframework.integration.errorLogger`)现在在积分图中表示时具有缩短的名称。有关更多信息,请参见[积分图](./graph.html#integration-graph)。 在聚合器中,当`MessageGroupProcessor`返回`Message`时,如果`sequenceDetails`与组的第一条消息中的头匹配,则在输出消息上执行`MessageBuilder.popSequenceDetails()`。有关更多信息,请参见[聚合器编程模型](./aggregator.html#aggregator-api)。 在 Java DSL 中添加了一个新的`publishSubscribeChannel()`操作符,该操作符基于`BroadcastCapableChannel`和`BroadcastPublishSubscribeSpec`。当我们为经纪人支持的通道(如`SubscribableJmsChannel`,`SubscribableRedisChannel`等)将子流配置为发布-订阅服务器时,这种 Fluent API 具有其优势。有关更多信息,请参见[子流支持](./dsl.html#java-dsl-subflows)。 Spring 集成中的事务支持现在还包括配置`ReactiveTransactionManager`的选项,如果`MessageSource`或`MessageHandler`实现产生了用于发送有效负载的反应性类型。有关更多信息,请参见`TransactionInterceptorBuilder`。另见[被动交易](./transactions.html#reactive-transactions)。 在 Java DSL 中添加了一个新的`intercept()`运算符,可以在不创建显式通道的情况下注册`ChannelInterceptor`实例。有关更多信息,请参见[操作员截获()](./dsl.html#java-dsl-intercept)。 `MessageStoreSelector`有一个新的机制来比较新旧的值。有关更多信息,请参见[幂等接收机 Enterprise 集成模式](./handler-advice.html#idempotent-receiver)。 现在,`MessageProducerSupport`基类有一个`subscribeToPublisher(Publisher>)`API,允许实现消息驱动的生产者端点,这些生产者端点通过反应性`Publisher`发送消息。有关更多信息,请参见[反应流支持](./reactive-streams.html#reactive-streams)。 ### AMQP 变化 出站通道适配器有一个新的属性`multiSend`,允许在一个`RabbitTemplate`调用的范围内发送多个消息。有关更多信息,请参见[AMQP 出站通道适配器](./amqp.html#amqp-outbound-channel-adapter)。 入站通道适配器现在支持一个侦听器容器,其`consumerBatchEnabled`属性设置为`true`。见[AMQP 入站通道适配器](./amqp.html#amqp-inbound-channel-adapter) ### http 更改 在`AbstractHttpRequestExecutingMessageHandler`上的`encodeUri`属性已被弃用,以支持新引入的`encodingMode`。有关更多信息,请参见`DefaultUriBuilderFactory.EncodingMode`Javadocs 和[控制 URI 编码](./http.html#http-uri-encoding)。这也会影响`WebFluxRequestExecutingMessageHandler`、相应的 Java DSL 和 XML 配置。将相同的选项添加到`AbstractWebServiceOutboundGateway`中。 ### Web 服务变更 已经为 Web 服务组件添加了 Java DSL 支持。在`AbstractWebServiceOutboundGateway`上的`encodeUri`属性已被弃用,以支持新引入的`encodingMode`-类似于上面的 HTTP 更改。有关更多信息,请参见[Web 服务支持](./ws.html#ws)。 ### TCP 更改 默认情况下,在当前连接失败之前,`FailoverClientConnectionFactory`不再会再次失败。有关更多信息,请参见[TCP 故障转移客户端连接工厂](./ip.html#failover-cf)。 `TcpOutboundGateway`现在支持异步请求/回复。有关更多信息,请参见[TCP 网关](./ip.html#tcp-gateways)。 现在,你可以将客户端连接配置为对新连接执行一些任意的测试。有关更多信息,请参见[测试连接](./ip.html#testing-connections)。 ### rsocket 更改 `decodeFluxAsUnit`选项已被添加到`RSocketInboundGateway`中,其含义是将传入的`Flux`作为单个单元进行解码,或对其中的每个事件应用解码。有关更多信息,请参见[RSocket 入站网关](./rsocket.html#rsocket-inbound)。 ### 动物园管理员变更 `LeaderInitiatorFactoryBean`(以及其 XML``)公开了一个`candidate`选项,用于对`Candidate`配置进行更多控制。有关更多信息,请参见[领导事件处理](./zookeeper.html#zk-leadership)。 ### MQTT 变化 现在可以将入站通道适配器配置为在消息被确认为已发送时为用户提供控制。有关更多信息,请参见[手动 ACK](./mqtt.html#mqtt-ack-mode)。 当连接无法创建或丢失时,出站适配器现在会发布`MqttConnectionFailedEvent`。以前,只有入站适配器才会这样做。见[MQTT 事件](./mqtt.html#mqtt-events)。 ### (s)FTP 更改 `FileTransferringMessageHandler`(例如对于 FTP 和 SFTP)除了`File`、`byte[]`、`String`和`InputStream`之外,现在还支持`org.springframework.core.io.Resource`。有关更多信息,请参见[SFTP 支持](./sftp.html#sftp)和[FTP 支持](./ftp.html#ftp)。 ### 文件更改 对于`markersJson`模式,`FileSplitter`不再需要 Jackson 处理器(或类似的)依赖关系。它使用`SimpleJsonSerializer`表示`FileSplitter.FileMarker`实例的简单字符串表示。有关更多信息,请参见[文件夹](./file.html#file-splitter)。 ### 5.1 和 5.2 之间的变化 ### 包和类的更改 `Pausable`已从`o.s.i.endpoint`移动到`o.s.i.core`。 ### 行为变化 请参阅[迁移指南](https://github.com/spring-projects/spring-integration/wiki/Spring-Integration-5.1-to-5.2-Migration-Guide)关于此版本中的行为更改。 ### 新组件 #### RSocket 支持 `spring-integration-rsocket`模块现在可以在支持 RSocket 协议的通道适配器实现中使用。有关更多信息,请参见[RSocket 支持](./rsocket.html#rsocket)。 #### 利率限制建议支持 `RateLimiterRequestHandlerAdvice`现在可用于限制处理程序的请求速率。有关更多信息,请参见[速率限制器建议](./handler-advice.html#rate-limiter-advice)。 #### 缓存建议支持 `CacheRequestHandlerAdvice`现在可用于在处理程序上缓存请求结果。有关更多信息,请参见[缓存建议](./handler-advice.html#cache-advice)。 #### Kotlin 脚本支持 JSR223 脚本模块现在包括对 Kotlin 脚本的支持。有关更多信息,请参见[脚本支持](./scripting.html#scripting)。 #### 流量聚合器支持 `FluxAggregatorMessageHandler`现在可用于基于 Project Reactor`Flux`操作符的消息逻辑的分组和窗口。有关更多信息,请参见[通量聚合器](./aggregator.html#flux-aggregator)。 #### FTP/SFTP 事件发布者 FTP 和 SFTP 模块现在为某些 Apache Mina FTP/SFTP 服务器事件提供了一个事件侦听器。有关更多信息,请参见[Apache Mina FTP 服务器事件](./ftp.html#ftp-server-events)和[Apache Mina SFTP 服务器事件](./sftp.html#sftp-server-events)。 #### AVRO 变压器 现在提供了简单的 Apache AVRO 变压器。有关更多信息,请参见[AVRO 变压器](./transformers.html#avro-transformers)。 ### 一般变化 现在,`JsonToObjectTransformer`支持将目标对象反序列化为泛型。有关更多信息,请参见[JSON 变形金刚](./transformer.html#json-transformers)。 `splitter`现在支持`discardChannel`配置选项。有关更多信息,请参见[Splitter](./splitter.html#splitter)。 控制总线现在可以处理`Pausable`(`Lifecycle`的扩展)操作。有关更多信息,请参见[控制总线](./control-bus.html#control-bus)。 为聚合器组件引入了`Function>`策略,用于合并和计算输出消息的头。有关更多信息,请参见[聚合器编程模型](./aggregator.html#aggregator-api)。 在框架中抛出的所有`MessageHandlingException`s,现在包括一个 Bean 资源和用于反向跟踪配置部分的源,以防不涉及最终用户代码。有关更多信息,请参见[错误处理](./error-handling.html#error-handling)。 为了获得更好的最终用户体验,Java DSL 现在提供了一个配置变量,用于通过网关接口启动流。有关更多信息,请参见`IntegrationFlows.from(Class serviceInterface, Consumer endpointConfigurer)`Javadocs。另外,`MethodArgsHolder`现在是用于`GatewayProxyFactoryBean`中所有表达式的求值上下文的根对象。现在不推荐`#args`和`#method`评估上下文变量。有关更多信息,请参见[消息传递网关](./gateway.html#gateway)。 #### AMQP 变化 如果在超时期间没有收到发布者确认,那么出站端点现在可以被配置为合成“NACK”。有关更多信息,请参见[出站通道适配器](./amqp.html#amqp-outbound-endpoints)。 入站通道适配器现在可以作为`List`有效负载接收批处理的消息,而不是为每个批处理片段接收离散的消息。有关更多信息,请参见[批处理消息](./amqp.html#amqp-debatching)。 现在可以将出站通道适配器配置为阻止调用线程,直到收到发布者确认(确认)。有关更多信息,请参见[出站通道适配器](./amqp.html#amqp-outbound-channel-adapter)。 #### 文件更改 对过滤远程文件进行了一些改进。有关更多信息,请参见[远程持久文件列表过滤器](./file.html#remote-persistent-flf)。 #### TCP 更改 `ByteArrayLengthHeaderSerializer`使用的长度标头现在可以在有效负载之外包括标头的长度。有关更多信息,请参见[消息划分(序列化器和反序列化器)](./ip.html#tcp-codecs)。 当使用`TcpNioServerConnectionFactory`时,现在优先考虑接受新的连接,而不是从现有连接中读取新的连接,但是它是可配置的。有关更多信息,请参见[关于非阻塞 I/O(蔚来)](./ip.html#note-nio)。 出站网关有一个新的属性`closeStreamAfterSend`;当与新的连接一起使用时,对于每个请求/应答它向服务器发出 EOF 信号,而不关闭连接。这对于使用 EOF 来表示消息结束而不是数据中的某些分隔符的服务器很有用。有关更多信息,请参见[TCP 网关](./ip.html#tcp-gateways)。 客户机连接工厂现在支持`connectTimeout`,如果在此期间没有建立连接,则会引发异常。有关更多信息,请参见[TCP 连接工厂](./ip.html#tcp-connection-factory)。 `SoftEndOfStreamException`现在是`RuntimeException`,而不是扩展`IOException`。 #### 邮件更改 `AbstractMailReceiver`现在有一个`autoCloseFolder`选项(默认情况下是`true`),可以在获取后禁用自动文件夹关闭,但是填充`IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE`头,以进行下游交互。有关更多信息,请参见[邮件接收通道适配器](./mail.html#mail-inbound)。 #### http 更改 HTTP 入站端点现在支持请求有效负载验证。有关更多信息,请参见[HTTP 支持](./http.html#http)。 #### WebFlux 更改 `WebFluxRequestExecutingMessageHandler`现在支持`Publisher`、`Resource`和`MultiValueMap`作为请求消息`payload`。`WebFluxInboundEndpoint`现在支持请求有效负载验证。有关更多信息,请参见[WebFlux 支持](./webflux.html#webflux)。 #### MongoDB 变更 现在可以将`MongoDbMessageStore`配置为自定义转换器。有关更多信息,请参见[MongoDB 支持](./mongodb.html#mongodb)。 #### 路由器变更 现在你可以禁用返回通道键作为通道 Bean 名称。有关更多信息,请参见[动态路由器](./router.html#dynamic-routers)。 #### ftp/sftp 更改 现在将`RotatingServerAdvice`与`RotationPolicy`及其`StandardRotationPolicy`解耦。 远程文件信息,包括主机/端口和目录,现在包含在`AbstractInboundFileSynchronizingMessageSource`和`AbstractRemoteFileStreamingMessageSource`实现中的消息头中。这一信息也包括在`AbstractRemoteFileOutboundGateway`实现的读取操作结果中的标题中。FTP 出站端点现在支持`chmod`更改上载文件的权限。(SFTP 从 4.3 版本开始就支持它了)。有关更多信息,请参见[FTP 支持](./ftp.html#ftp)和[SFTP 支持](./sftp.html#sftp)。 ### 5.0 和 5.1 之间的变化 #### 新组件 以下组件是 5.1 中的新组件: * [`AmqpDedicatedChannelAdvice`](#x5.1-amqpdedicatedchanneladvice) ##### `AmqpDedicatedChannelAdvice` 见[严格的消息排序](./amqp.html#amqp-strict-ordering)。 ##### 功能支持改进 `java.util.function`接口现在在框架组件中具有改进的集成支持。 Kotlin Lambdas 现在也可以用于处理程序和源方法。 参见[`java.util.function`接口支持]。 ##### `@LongRunningTest` 提供了一个 JUnit5`@LongRunningTest`条件注释,用于检查值为`RUN_LONG_INTEGRATION_TESTS`的`true`条目的环境或系统属性,以确定是否应该运行或跳过测试。 见[JUnit 规则和条件](./testing.html#test-junit-rules)。 #### 一般变动 在版本 5.1 中进行了以下更改: * [Java DSL](#x5.1-java-dsl) * [调度器异常](#x5.1-dispatcher-exceptions) * [全球信道拦截器](#x5.1-global-channel-interceptors) * [`ObjectToJsonTransformer`](#x5.1-object-to-json-transformer) * [Integration Flows: Generated Bean Names](#x5.1-integration-flows-generated-bean-names) * [聚合器更改](#x5.1-aggregator) * [@Publisher 注释更改](#x5.1-publisher) * [集成图定制](#x51.-integration-graph) * [集成全局属性](#x51.-global-properties) * [`receiveTimeout`for`@Poller`](#x51.-poller-annotation) ##### Java DSL `IntegrationFlowContext`现在是一个接口,`IntegrationFlowRegistration`是`IntegrationFlowContext`的一个内部接口。 引入了一个新的`logAndReply()`操作符,以便在流的末尾记录请求-回复配置时使用。这避免了与`log()`的混淆,后者被视为单向结束流组件。 Bean 在集成流中为任何`NamedComponent`生成的名称现在基于组件类型,以便从可视化工具、日志分析器和度量收集器获得更好的可读性。 `GenericHandler.handle()`现在排除了第二个参数的`MessageHeaders`类型。 ##### Dispatcher 异常 由`AbstractDispatcher`捕获和重新抛出的异常现在更加一致: * 具有`failedMessage`属性的任何类型的`MessagingException`都将被重新抛出,保持不变。 * 所有其他异常都包装在`MessageDeliveryException`中,并带有`failedMessage`属性集。 以前: * 具有`failedMessage`属性的任何类型的`MessagingException`都会被重新抛出,不变。 * 没有`failedMessage`属性的`MessagingException`被包装在`MessagingException`中,并带有`failedMessage`属性集。 * 其他`RuntimeException`实例被重新抛出,保持不变。 * 选中的异常被包装在带有`failedMessage`属性集的`MessageDeliveryException`中。 ##### 全局信道拦截器 全局信道拦截器现在应用于动态注册的信道,例如在使用 Java DSL 或使用`beanFactory.initializeBean()`初始化的 bean 时通过`IntegrationFlowContext`。以前,当应用程序上下文被刷新后创建 bean 时,拦截程序不会被应用。 ##### 信道拦截器 当没有收到消息时,将不再调用`ChannelInterceptor.postReceive()`;不再需要检查`null``Message`。以前,这种方法被称为。如果你的拦截器依赖于前面的行为,那么可以实现`afterReceiveCompleted()`,因为无论是否接收到消息,该方法都会被调用。此外,`PolledAmqpChannel`和`PolledJmsChannel`以前不会用`afterReceiveCompleted()`调用`afterReceiveCompleted()`;现在它们会调用。 ##### `ObjectToJsonTransformer` 为`ObjectToJsonTransformer`引入了一个新的`ResultType.BYTES`模式。 有关更多信息,请参见[JSON 变形金刚](./transformer.html#json-transformers)。 ##### 集成流:生成的 Bean 名称 从版本 5.0.5 开始,在`IntegrationFlow`中为组件生成的 Bean 名称包括流 Bean 名称,然后是一个点,作为前缀。例如,如果一个流 Bean 被命名为`flowBean`,那么生成的 Bean 可能被命名为`flowBean.generatedBean`。 有关更多信息,请参见[处理消息流](./dsl.html#java-dsl-flows)。 ##### 聚合器更改 如果`groupTimeout`被求值为负值,聚合器现在立即使该组过期。只有`null`被认为是对当前消息不做任何事情的信号。 引入了一个新的`popSequence`属性,允许(默认情况下)为输出消息调用`MessageBuilder.popSequenceDetails()`。另外,`AbstractAggregatingMessageGroupProcessor`现在返回`AbstractIntegrationMessageBuilder`,而不是整个`Message`,以进行优化。 有关更多信息,请参见[Aggregator](./aggregator.html#aggregator)。 ##### @publisher 注释更改 从版本 5.1 开始,你必须使用`@EnablePublisher`或在``上使用``子元素来显式地打开`@Publisher` AOP 功能。还添加了`proxy-target-class`和`order`属性,用于优化`ProxyFactory`配置。 有关更多信息,请参见[使用`@Publisher`注释的注释驱动配置]。 #### 文件更改 如果使用`FileExistsMode.APPEND`或`FileExistsMode.APPEND_NO_FLUSH`,则可以提供一个`newFileCallback`,在创建新文件时将调用它。此回调接收新创建的文件和触发回调的消息。例如,这可以用来编写一个 CSV 标头。 现在,`FileReadingMessageSource`在调用它的`start()`之前,不会检查并创建一个目录。因此,如果`FileReadingMessageSource`的入站通道适配器具有`autoStartup = false`,则在应用程序启动期间不会出现针对文件系统的故障。 有关更多信息,请参见[文件支持](./file.html#files)。 #### AMQP 变化 我们已经在`ID`和`Timestamp`头映射中对`DefaultAmqpHeaderMapper`进行了更改。有关更多信息,请参见[AMQP 消息头](./amqp.html#amqp-message-headers)底部附近的注释。 `contentType`标头现在被正确地映射为 General Headers 映射中的一个条目。有关更多信息,请参见[ContentType 标头](./amqp.html#amqp-content-type)。 从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载是带有额外`ManualAckListenerExecutionFailedException`和`deliveryTag`属性的`ManualAckListenerExecutionFailedException`。这使错误流能够 ACK/NACK 原始消息。有关更多信息,请参见[入站消息转换](./amqp.html#amqp-conversion-inbound)。 #### JDBC 更改 在 JDBC 入站通道适配器和 JDBC 出站网关上的一个令人困惑的`max-rows-per-poll`属性已被弃用,取而代之的是新引入的`max-rows`属性。 当请求消息的有效负载是`Iterable`类型的实例时,`JdbcMessageHandler`现在支持`batchUpdate`功能。 `INT_CHANNEL_MESSAGE`表(`JdbcChannelMessageStore`)的索引已经优化。如果在这样的存储区中有大的消息组,则可能希望更改索引。 有关更多信息,请参见[JDBC 支持](./jdbc.html#jdbc)。 #### FTP 和 SFTP 更改 现在可以使用`RotatingServerAdvice`用入站通道适配器轮询多个服务器和目录。有关更多信息,请参见[入站通道适配器:轮询多个服务器和目录](./ftp.html#ftp-rotating-server-advice)和[入站通道适配器:轮询多个服务器和目录](./sftp.html#sftp-rotating-server-advice)。 此外,入站适配器`localFilenameExpression`实例可以包含`#remoteDirectory`变量,该变量包含正在轮询的远程目录。比较器的通用类型(用于对流适配器的获取文件列表进行排序)已从`Comparator>`更改为`Comparator`。有关更多信息,请参见[FTP 流入站通道适配器](./ftp.html#ftp-streaming)和[SFTP 流入站通道适配器](./sftp.html#sftp-streaming)。 此外,用于入站通道适配器的同步器现在可以提供一个`Comparator`。这在使用`maxFetchSize`限制检索的文件时很有用。 `CachingSessionFactory`具有一个新的属性`testSession`,如果该属性为真,则当从缓存中签出一个已存在的会话时,工厂将在`test()`上执行一个`test()`操作。 有关更多信息,请参见[SFTP Session Caching](./sftp.html#sftp-session-caching)和[FTP Session Caching](./ftp.html#ftp-session-caching)。 出站网关 mput 命令现在支持带有文件或字符串集合的消息有效负载。有关更多信息,请参见[SFTP 出站网关](./sftp.html#sftp-outbound-gateway)和[FTP 出站网关](./ftp.html#ftp-outbound-gateway)。 #### TCP 支持 在使用 SSL 时,现在默认情况下启用了主机验证,以防止使用受信任证书的中间人攻击。有关更多信息,请参见[主机验证](./ip.html#tcp-ssl-host-verification)。 此外,键和信任存储类型现在可以在`DefaultTcpSSLContextSupport`上配置。 #### Twitter 支持 由于 Spring 社交项目已经转移到[生命终结状态](https://spring.io/blog/2018/07/03/spring-social-end-of-life-announcement), Spring 集成中的 Twitter 支持已经转移到扩展项目中。有关更多信息,请参见[Spring Integration Social Twitter](https://github.com/spring-projects/spring-integration-extensions/tree/main/spring-integration-social-twitter)。 #### JMS 支持 `JmsSendingMessageHandler`现在提供`deliveryModeExpression`和`timeToLiveExpression`选项,以确定在运行时要发送的 JMS 消息的相应 QoS 选项。现在,`DefaultJmsHeaderMapper`允许通过设置`true`相应的`setMapInboundDeliveryMode()`和`setMapInboundExpiration()`选项来映射入站`JMSExpiration`属性。当`JmsMessageDrivenEndpoint`或`JmsInboundGateway`被停止时,关联的侦听器容器现在被关闭;这将关闭其共享连接和任何使用者。你可以将端点配置为恢复到以前的行为。 有关更多信息,请参见[JMS 支持](./jms.html#jms)。 #### http/webflux 支持 `statusCodeExpression`(和`Function`)现在提供了`RequestEntity`作为求值上下文的根对象,因此可以使用请求头、方法、URI 和主体来计算目标状态代码。 有关更多信息,请参见[HTTP 支持](./http.html#http)和[WebFlux 支持](./webflux.html#webflux)。 #### JMX 更改 如果对象名称键值包含 Java 标识符(或句点`.`)中所允许的字符以外的任何字符,则现在引用它们。例如`org.springframework.integration:type=MessageChannel,``name="input:foo.myGroup.errors"`。这样做的副作用是,以前“允许”的名字,加上这样的字符,现在会被引用。例如`org.springframework.integration:type=MessageChannel,``name="input#foo.myGroup.errors"`。 #### 千分尺支持变更 现在可以更简单地定制由该框架创建的标准千分表。有关更多信息,请参见[千分尺积分](./metrics.html#micrometer-integration)。 #### 集成图定制 现在可以在`IntegrationGraphServer`上通过`Function> additionalPropertiesCallback`向`IntegrationNode`s 添加附加属性。有关更多信息,请参见[积分图](./graph.html#integration-graph)。 #### 集成全局属性 当打开`org.springframework.integration`类别的`DEBUG`逻辑级别时,现在可以在日志中打印集成全局属性(包括默认值)。有关更多信息,请参见[全局属性](./configuration.html#global-properties)。 #### `receiveTimeout`的`@Poller` 为了方便起见,`@Poller`注释现在提供了`receiveTimeout`选项。请参阅[使用`@Poller`注释](./configuration.html#configuration-using-poller-annotation)以获取更多信息。 ### 4.3 到 5.0 之间的变化 有关可能影响应用程序的重要更改,请参见[迁移指南](https://github.com/spring-projects/spring-integration/wiki/Spring-Integration-4.3-to-5.0-Migration-Guide)。你可以在[wiki](https://github.com/spring-projects/spring-integration/wiki)上找到所有回到 2.1 版本的迁移指南。 #### 新组件 5.0 版本增加了许多新的组件。 ##### Java DSL 单独的[Spring Integration Java DSL](https://github.com/spring-projects/spring-integration-java-dsl)项目现在已合并到核心 Spring 集成项目中。用于通道适配器和网关的`IntegrationComponentSpec`实现被分发到它们的特定模块。有关 Java DSL 支持的更多信息,请参见[Java DSL](./dsl.html#java-dsl)。另请参见[4.3 到 5.0 迁移指南](https://github.com/spring-projects/spring-integration/wiki/Spring-Integration-4.3-to-5.0-Migration-Guide#java-dsl),以了解移动到 Spring Integration5.0 所需的步骤。 ##### 测试支持 我们创建了一个新的 Spring 集成测试框架,以帮助测试 Spring 集成应用程序。现在,使用测试类上的`@SpringIntegrationTest`注释和`MockIntegration`工厂,你可以使集成流的 JUnit 测试变得更容易一些。 有关更多信息,请参见[测试支持](./testing.html#testing)。 ##### MongoDB 出站网关 新的`MongoDbOutboundGateway`允许你通过向数据库的请求通道发送消息,按需对数据库进行查询。 有关更多信息,请参见[MongoDB 出站网关](./mongodb.html#mongodb-outbound-gateway)。 ##### WebFlux 网关和通道适配器 我们介绍了用于 Spring WebFlux 框架网关和通道适配器的新的 WebFlux 支持模块。 有关更多信息,请参见[WebFlux 支持](./webflux.html#webflux)。 ##### 内容类型转换 既然我们使用了新的基于`InvocableHandlerMethod`的基础架构来进行服务方法调用,那么我们就可以执行`contentType`从有效负载到目标方法参数的转换。 有关更多信息,请参见[内容类型转换](./endpoint.html#content-type-conversion)。 ##### `ErrorMessagePublisher`和`ErrorMessageStrategy` 我们添加了`ErrorMessagePublisher`和`ErrorMessageStrategy`来创建`ErrorMessage`实例。 有关更多信息,请参见[错误处理](./error-handling.html#error-handling)。 ##### JDBC 元数据存储 我们添加了`MetadataStore`实现的 JDBC 实现。当你需要确保元数据的事务边界时,这是非常有用的。 有关更多信息,请参见[JDBC 元数据存储](./jdbc.html#jdbc-metadata-store)。 #### 一般更改 Spring 集成现在完全基于 Spring 框架`5.0`和项目反应堆`3.1`。以前的 Project Reactor 版本不再支持。 ##### 核心变化 `@Poller`注释现在具有`errorChannel`属性,以便更轻松地配置底层`MessagePublishingErrorHandler`。有关更多信息,请参见[注释支持](./configuration.html#annotations)。 所有请求-应答端点(基于`AbstractReplyProducingMessageHandler`)现在都可以启动事务,因此,使整个下游流具有事务性。有关更多信息,请参见[事务支持](./handler-advice.html#tx-handle-message-advice)。 现在,`SmartLifecycleRoleController`提供了获取角色中端点状态的方法。有关更多信息,请参见[端点角色](./endpoint.html#endpoint-roles)。 默认情况下,POJO 方法现在通过使用`InvocableHandlerMethod`调用,但是你可以像以前一样将它们配置为使用 SPEL。有关更多信息,请参见[POJO 方法调用](./overview.html#pojo-invocation)。 当以 POJO 方法为消息处理程序时,你现在可以使用`@Default`注释标记其中一个服务方法,以便为不匹配的条件提供一种后备机制。有关更多信息,请参见[配置服务激活器](./service-activator.html#service-activator-namespace)。 我们添加了一个简单的`PassThroughTransactionSynchronizationFactory`,以始终在当前事务上下文中存储轮询消息。该消息用作`failedMessage`属性的`MessagingException`,该属性包装事务完成期间抛出的任何原始异常。有关更多信息,请参见[事务同步](./transactions.html#transaction-synchronization)。 基于聚合器表达式的`ReleaseStrategy`现在根据`MessageGroup`计算表达式,而不是仅根据`Message`的集合计算表达式。有关更多信息,请参见[Aggregators and Spring Expression Language (SpEL)](./aggregator.html#aggregator-spel)。 你现在可以用定制的`JsonObjectMapper`提供`ObjectToMapTransformer`。 有关更多信息,请参见[Aggregators and Spring Expression Language (SpEL)](./aggregator.html#aggregator-spel)。 `@GlobalChannelInterceptor`注释和``现在支持组件名称匹配的负模式(通过`!`前置)。有关更多信息,请参见[全局信道拦截器配置](./channel.html#global-channel-configuration-interceptors)。 当候选者未能获得锁时,`LockRegistryLeaderInitiator`现在通过`DefaultLeaderEventPublisher`发出一个新的`OnFailedToAcquireMutexEvent`。有关更多信息,请参见`[Leadership Event Handling](./endpoint.html#leadership-event-handling)`。 ##### 网关更改 当网关方法具有`void`返回类型并且提供了错误通道时,网关现在正确地设置`errorChannel`报头。在此之前,头文件是不填充的。这导致同步下游流(在调用线程上运行)将异常发送到配置的通道,但是异步下游流上的异常将被发送到默认的`errorChannel`。 `RequestReplyExchanger`接口现在有一个`throws MessagingException`子句,以满足建议的消息交换契约。 现在可以使用 SPEL 表达式指定请求和回复超时。有关更多信息,请参见[消息传递网关](./gateway.html#gateway)。 ##### 聚合器性能更改 默认情况下,聚合器现在使用`SimpleSequenceSizeReleaseStrategy`,这更有效,尤其是对于大型组。空组现在被安排在`empty-group-min-timeout`之后被删除。有关更多信息,请参见[Aggregator](./aggregator.html#aggregator)。 ##### 拆分器更改 Splitter 组件现在可以处理和分割 Java`Stream`和反应流`Publisher`对象。如果输出通道是`ReactiveStreamsSubscribableChannel`,则`AbstractMessageSplitter`构建一个`Flux`用于后续迭代,而不是常规的`Iterator`,这与被分割的对象无关。此外,`AbstractMessageSplitter`提供了`protected obtainSizeIfPossible()`方法,以允许确定`Iterable`和`Iterator`对象的大小,如果这是可能的话。有关更多信息,请参见[Splitter](./splitter.html#splitter)。 ##### JMS 更改 以前, Spring Integration JMS XML 配置对 JMS 连接工厂使用默认的 Bean 名称`connectionFactory`,这使得组件定义中省略了该属性。我们将其重命名为`jmsConnectionFactory`,这是 Spring 引导用于自动配置 JMS 连接工厂 Bean 的 Bean 名称。 如果你的应用程序依赖于先前的行为,那么你可以将你的`connectionFactory` Bean 重命名为`jmsConnectionFactory`,或者通过使用其当前名称来专门配置组件以使用你的 Bean。有关更多信息,请参见[JMS 支持](./jms.html#jms)。 ##### 邮件更改 一些与呈现 IMAP 邮件内容的不一致之处已得到解决。有关更多信息,请参见[“邮件接收通道适配器”部分中的注释](./mail.html#imap-format-important)。 ##### 提要更改 而不是`com.rometools.fetcher.FeedFetcher`,这在罗马是不受欢迎的,我们为`FeedEntryMessageSource`引入了一个新的`Resource`属性。有关更多信息,请参见[馈源适配器](./feed.html#feed)。 ##### 文件更改 我们引入了新的`FileHeaders.RELATIVE_PATH`消息头来表示`FileReadingMessageSource`中的相对路径。 尾部适配器现在支持`idleEventInterval`在该期间文件中没有数据时发出事件。 `FileWritingMessageHandler`的 flush 谓词现在有了一个额外的参数。 文件出站通道适配器和网关(`FileWritingMessageHandler`)现在支持`REPLACE_IF_MODIFIED``FileExistsMode`。 它们现在还支持在新编写的文件上设置文件权限。 一个新的`FileSystemMarkerFilePresentFileListFilter`现在可用。有关更多信息,请参见[处理不完整的数据](./file.html#file-incomplete)。 现在,`FileSplitter`提供了一个`firstLineAsHeader`选项,可以将第一行内容作为消息头,发送给其余的行。 有关更多信息,请参见[文件支持](./file.html#files)。 ##### FTP 和 SFTP 更改 入站通道适配器现在具有一个名为`max-fetch-size`的属性,该属性用于在当前本地目录中没有文件时限制轮询期间获取的文件数量。默认情况下,它们还在`local-filter`中配置了`FileSystemPersistentAcceptOnceFileListFilter`。 还可以通过设置新引入的`scanner`属性,为入站通道适配器提供自定义`DirectoryScanner`实现。 现在,你可以将正则表达式和模式筛选器配置为始终传递目录。当你在出站网关中使用递归时,这可能是有用的。 默认情况下,所有入站通道适配器(基于流和同步)现在都使用适当的`AbstractPersistentAcceptOnceFileListFilter`实现,以防止远程文件的重复下载。 FTP 和 SFTP 出站网关现在在获取远程文件时支持`REPLACE_IF_MODIFIED``FileExistsMode`。 FTP 和 SFTP 流入站通道适配器现在在消息头中添加远程文件信息。 FTP 和 SFTP 出站通道适配器(以及用于出站网关的`PUT`命令)现在也支持`InputStream`as`payload`。 入站通道适配器现在可以通过使用新引入的`RecursiveDirectoryScanner`在本地构建文件树。有关注入,请参见[FTP 入站通道适配器](./ftp.html#ftp-inbound)部分中的`scanner`选项。另外,你现在可以将这些适配器切换到`WatchService`。 我们将`NLST`命令添加到`AbstractRemoteFileOutboundGateway`命令中,以执行 List Files Names Remote 命令。 现在可以使用`FtpOutboundGateway`和`workingDirExpression`来更改当前请求消息的 FTP 客户机工作目录。 现在为`RemoteFileTemplate`提供了`invoke(OperationsCallback action)`,以便在相同的、以线程为边界的`RemoteFileOperations`范围内执行多个`RemoteFileOperations`调用。 我们添加了新的过滤器来检测不完整的远程文件。 `FtpOutboundGateway`和`SftpOutboundGateway`现在支持使用`GET`或`MGET`命令在成功传输后删除远程文件的选项。 有关更多信息,请参见[FTP/FTPS 适配器](./ftp.html#ftp)和[SFTP 适配器](./sftp.html#sftp)。 ##### 积分属性 版本 4.3.2 添加了一个新的`spring.integration.readOnly.headers`全局属性,使你可以自定义不应该由`MessageBuilder`复制到新创建的`Message`的标题列表。有关更多信息,请参见[全局属性](./configuration.html#global-properties)。 ##### 流变化 我们在`CharacterStreamReadingMessageSource`上添加了一个新选项,以使其用于“pipe”stdin,并在管道关闭时发布应用程序事件。有关更多信息,请参见[从流中阅读](./stream.html#stream-reading)。 ##### 障碍变化 `BarrierMessageHandler`现在支持一个丢弃通道,可以将延迟到达的触发消息发送到该通道。有关更多信息,请参见[螺纹屏障](./barrier.html#barrier)。 ##### AMQP 变化 AMQP 出站端点现在支持在使用 RabbitMQ 延迟消息交换插件时设置延迟表达式。 入站端点现在支持 Spring AMQP`DirectMessageListenerContainer`。 支持 AMQP 的 Poller 通道现在为 Poller 配置的`receiveTimeout`(缺省:一秒)阻止 Poller 线程。 消息转换器添加到消息属性中的标题(例如`contentType`)现在在最终消息中使用。在此之前,它依赖于转换器类型,即最终消息中出现了哪些标头和消息属性。要覆盖转换器设置的标题,请将`headersMappedLast`属性设置为`true`。有关更多信息,请参见[AMQP 支持](./amqp.html#amqp)。 ##### http 更改 默认情况下,`DefaultHttpHeaderMapper.userDefinedHeaderPrefix`属性现在是一个空字符串,而不是`X-`。有关更多信息,请参见[HTTP 头映射](./http.html#http-header-mapping)。 默认情况下,`uriVariablesExpression`现在使用`SimpleEvaluationContext`(自 5.0.4 起)。 有关更多信息,请参见[映射 URI 变量](./http.html#mapping-uri-variables)。 ##### MQTT 变化 入站消息现在被映射为`RECEIVED_TOPIC`、`RECEIVED_QOS`和`RECEIVED_RETAINED`头,以避免在应用程序中继消息时无意中传播到出站消息。 出站通道适配器现在支持主题、QoS 和保留属性的表达式。默认值保持不变。有关更多信息,请参见[MQTT 支持](./mqtt.html#mqtt)。 ##### stomp 变化 基于项目反应器`3.1`和`reactor-netty`扩展,我们将 Stomp 模块改为使用`ReactorNettyTcpStompClient`。根据`ReactorNettyTcpStompClient`基础,我们将`Reactor2TcpStompSessionManager`重命名为`ReactorNettyTcpStompSessionManager`。有关更多信息,请参见[Stomp 支持](./stomp.html#stomp)。 ##### Web 服务变更 现在可以使用外部配置的`WebServiceTemplate`实例来提供`WebServiceOutboundGateway`实例。 `DefaultSoapHeaderMapper`现在可以将`javax.xml.transform.Source`用户定义的标头映射到一个 SOAP 标头元素。 简单的 WebService 入站和出站网关现在可以将完整的`WebServiceMessage`处理为`payload`,从而允许对 MTOM 附件进行操作。 有关更多信息,请参见[Web 服务支持](./ws.html#ws)。 ##### Redis 变更 现在为`RedisStoreWritingMessageHandler`提供了额外的用于 SPEL 表达式的基于`String`的 setter(为了方便 Java 配置)。你现在也可以在`RedisStoreWritingMessageHandler`上配置`zsetIncrementExpression`。此外,由于`ZADD`Redis 命令上的`INCR`选项是可选的,因此此属性已从`true`更改为`false`。 你现在可以为`RedisInboundChannelAdapter`提供用于执行 Redis 侦听器调用程序的`Executor`。此外,接收到的消息现在包含一个`RedisHeaders.MESSAGE_SOURCE`头,以指示消息的来源(主题或模式)。 有关更多信息,请参见[Redis 支持](./redis.html#redis)。 ##### TCP 更改 我们添加了一个新的`ThreadAffinityClientConnectionFactory`来将 TCP 连接绑定到线程。 现在,你可以将 TCP 连接工厂配置为支持`PushbackInputStream`实例,让反序列化器在“reading ahead”之后“unread”(后推)字节。 我们添加了不带`maxMessageSize`的`ByteArrayElasticRawDeserializer`,以根据需要控制和缓冲传入数据。 有关更多信息,请参见[TCP 和 UDP 支持](./ip.html#ip)。 ##### Gemfire 变化 `GemfireMetadataStore`现在实现`ListenableMetadataStore`,通过向存储提供`MetadataStoreListener`实例,让你监听缓存事件。有关更多信息,请参见[Pivotal Gemfire 和 Apache Geode 支持](./gemfire.html#gemfire)。 ##### JDBC 更改 `JdbcMessageChannelStore`现在提供了`ChannelMessageStorePreparedStatementSetter`的 setter,允许你在存储中自定义消息插入。 `ExpressionEvaluatingSqlParameterSourceFactory`现在提供了`sqlParameterTypes`的 setter,允许你定制参数的 SQL 类型。 有关更多信息,请参见[JDBC 支持](./jdbc.html#jdbc)。 ##### 指标变化 [Micrometer](https://micrometer.io/)现在支持应用程序监视(自版本 5.0.2 起)。有关更多信息,请参见[千分尺积分](./metrics.html#micrometer-integration)。 | |在版本 5.0.3 中对千分尺`Meters`进行了更改,以使其更适合在多维系统中使用。
在 5.0.4 中进行了进一步的更改。
如果你使用千分尺,我们建议至少使用版本 5.0.4。| |---|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| ##### `@EndpointId`注释 在版本 5.0.4 中引入了此注释,当你使用 Java 配置时,此注释提供了对 Bean 命名的控制。有关更多信息,请参见[Endpoint Bean Names](./overview.html#endpoint-bean-names)。 ### 4.2 与 4.3 之间的变化 有关可能影响应用程序的重要更改,请参见[迁移指南](https://github.com/spring-projects/spring-integration/wiki/Spring-Integration-4.2-to-4.3-Migration-Guide)。你可以在[Wiki](https://github.com/spring-projects/spring-integration/wiki)上找到所有回到 2.1 版本的迁移指南。 #### 新组件 版本 4.3 增加了一些新的组件。 ##### AMQP 异步出站网关 见[异步出站网关](./amqp.html#amqp-async-outbound-gateway)。 ##### `MessageGroupFactory` 我们引入了`MessageGroupFactory`策略,以允许在`MessageGroupStore`逻辑中控制`MessageGroup`实例。我们为`SimpleMessageGroup`添加了`SimpleMessageGroupFactory`实现,并将`GroupType.HASH_SET`作为标准`MessageGroupStore`实现的默认工厂。有关更多信息,请参见[消息存储](./message-store.html#message-store)。 ##### `PersistentMessageGroup` 我们为持久的`getMessageGroup()`实例添加了`PersistentMessageGroup`(lazy-load proxy)实现,当`getMessageGroup()`的`lazyLoadMessageGroups`是`true`(默认)时,它为`getMessageGroup()`实例返回这个实例。有关更多信息,请参见[消息存储](./message-store.html#message-store)。 ##### FTP 和 SFTP 流入站通道适配器 我们添加了入站通道适配器,这些适配器为每个文件返回`InputStream`,这样你就可以检索远程文件,而无需将它们写入本地文件系统。有关更多信息,请参见[FTP 流入站通道适配器](./ftp.html#ftp-streaming)和[SFTP 流入站通道适配器](./sftp.html#sftp-streaming)。 ##### `StreamTransformer` 我们添加了`StreamTransformer`来将`InputStream`有效载荷转换为`byte[]`或`String`。有关更多信息,请参见[流变压器](./transformer.html#stream-transformer)。 ##### 积分图 我们添加了`IntegrationGraphServer`,以及`IntegrationGraphController`REST 服务,以将 Spring 集成应用程序的运行时模型公开为一个图。有关更多信息,请参见[积分图](./graph.html#integration-graph)。 ##### JDBC 锁定注册表 对于通过数据库表共享的分布式锁,我们添加了`JdbcLockRegistry`。有关更多信息,请参见[JDBC 锁定注册表](./jdbc.html#jdbc-lock-registry)。 ##### `LeaderInitiator`表示`LockRegistry` 我们添加了基于`LockRegistry`策略的`LeaderInitiator`实现。有关更多信息,请参见[领导事件处理](./endpoint.html#leadership-event-handling)。 #### 一般变化 本节描述了版本 4.3 为 Spring 集成带来的一般更改。 ##### 核心变化 本节描述对 Spring 集成的核心的一般更改。 ###### 链中的出站网关 以前,你可以在链中的出站网关上指定`reply-channel`。它被完全忽视了。网关的回复将发送到下一个链元素,或者,如果网关是最后一个元素,则发送到链的输出通道。这种情况现在已被发现并被禁止。如果你有这样的配置,请删除`reply-channel`。 ###### 异步服务激活器 我们添加了一个选项,使服务激活器是同步的。有关更多信息,请参见[异步服务激活器](./service-activator.html#async-service-activator)。 ###### 消息传递注释支持更改 消息传递注释支持在类级别上不需要`@MessageEndpoint`(或任何其他`@Component`)注释声明。要恢复以前的行为,请将`spring.integration.properties`的`spring.integration.messagingAnnotations.require.componentAnnotation`设置为`true`。有关更多信息,请参见[全局属性](./configuration.html#global-properties)和[注释支持](./configuration.html#annotations)。 ##### 邮件更改 本节描述对 Spring 集成邮件功能的一般更改。 ###### 可定制用户标志 可定制的`userFlag`(在 4.2.2 中添加,以提供用于表示已看到邮件的标志的定制)现在在 XML 命名空间中可用。有关更多信息,请参见[不支持`\Recent`时标记 IMAP 消息]。 ###### 邮件消息映射 现在,你可以使用包含邮件头和包含电子邮件内容的有效负载的`MessageHeaders`映射入站邮件。以前,有效载荷总是 RAW`MimeMessage`。有关更多信息,请参见[入站邮件消息映射](./mail.html#mail-mapping)。 ##### JMS 更改 本节描述对 Spring 集成 JMS 功能的一般更改。 ###### Header Mapper 现在,`DefaultJmsHeaderMapper`通过调用其`toString()`方法,将标准`correlationId`标头映射为消息属性。有关更多信息,请参见[映射消息头到和来自 JMS 消息](./jms.html#jms-header-mapping)。 ###### 异步网关 JMS 出站网关现在具有`async`属性。有关更多信息,请参见[异步网关](./jms.html#jms-async-gateway)。 ##### 聚合器更改 当 POJO 聚合器释放`Message`对象的集合时,行为会发生变化。这是很少见的,但是,如果你的应用程序做到了这一点,你需要对 POJO 进行一个小的更改。有关更多信息,请参见[重要信息:`SimpleMessageGroup.getMessages()`方法返回`unmodifiableCollection`。](./AGGregator.html#agg-message-collection)注释。 ##### TCP/UDP 更改 本节描述对 Spring 集成 TCP/UDP 功能的一般更改。 ###### 事件 在启动服务器连接工厂时,将发出一个新的`TcpConnectionServerListeningEvent`。有关更多信息,请参见[TCP 连接事件](./ip.html#tcp-events)。 现在可以在``上使用`destination-expression`和`socket-expression`属性。有关更多信息,请参见[UDP 适配器](./ip.html#udp-adapters)。 ###### 流反序列化器 各种反序列化器在组装完整个消息之前不能分配最终的缓冲区,现在它们支持池合并接收数据的原始缓冲区,而不是为每个消息创建和丢弃缓冲区。有关更多信息,请参见[TCP 连接工厂](./ip.html#tcp-connection-factories)。 ###### TCP 消息映射器 消息映射器现在可选地设置一个已配置的内容类型标头。有关更多信息,请参见[IP 消息头](./ip.html#ip-msg-headers)。 ##### 文件更改 本节描述对 Spring 集成文件功能的一般更改。 ###### 目标目录创建 为`FileWritingMessageHandler`生成的文件名可以表示为目标目录中的文件保存所需的目录结构的子路径。有关更多信息,请参见[生成文件名](./file.html#file-writing-file-names)。 `FileReadingMessageSource`现在隐藏了内部类中的`WatchService`目录扫描逻辑。我们添加了`use-watch-service`和`watch-events`选项来启用此行为。由于 API 的不一致性,我们不推荐顶级`WatchServiceDirectoryScanner`。有关更多信息,请参见[`WatchServiceDirectoryScanner`](./file.html#watch-service-directory-scanner)。 ###### 缓冲区大小 写文件时,现在可以指定缓冲区大小。 ###### 追加和刷新 现在,你可以避免在追加文件时刷新文件,并在空闲期间使用许多策略来刷新数据。有关更多信息,请参见[在使用`APPEND_NO_FLUSH`时刷新文件]。 ###### 保存时间戳 现在可以配置出站通道适配器来设置目标文件的`lastmodified`时间戳。有关更多信息,请参见[文件时间戳](./file.html#file-timestamps)。 ###### 拆分器更改 现在,当文件被完全读取时,`FileSplitter`会自动关闭一个 FTP 或 SFTP会话。当出站网关返回`InputStream`或者当你使用新的 FTP 或 SFTP 流媒体通道适配器时,这一点将得到应用。我们还引入了一个新的`markers-json`选项,将`FileSplitter.FileMarker`转换为 JSON`String`,以进行放松的下游网络交互。有关更多信息,请参见[文件拆分器](./file.html#file-splitter)。 ###### 文件过滤器 我们添加了`ChainFileListFilter`作为`CompositeFileListFilter`的替代方案。有关更多信息,请参见[读取文件](./file.html#file-reading)。 ##### AMQP 变化 本节描述对 Spring 集成 AMQP 功能的一般更改。 ###### 内容类型消息转换器 出站端点现在支持配置为`RabbitTemplate`的`ContentTypeDelegatingMessageConverter`,这样你就可以根据消息内容类型选择转换器。有关更多信息,请参见[出站消息转换](./amqp.html#content-type-conversion-outbound)。 ###### 用于延迟消息处理的头 Spring AMQP1.6 增加了对[延迟的消息交换](https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/)的支持。头映射现在支持此功能使用的头(`amqp_delay`和`amqp_receivedDelay`)。 ###### AMQP 支持的通道 AMQP 支持的通道现在支持消息映射。有关更多信息,请参见[AMQP 支持的消息通道](./amqp.html#amqp-channels)。 ##### Redis 变更 本节描述对 Spring 集成 Redis 功能的一般更改。 ###### 列表推送/弹出方向 以前,队列通道适配器总是在固定的方向上使用 Redis 列表,将其推到左端并从右端读取。现在,你可以分别使用`rightPop`和`leftPush`选项来配置读写方向和`RedisQueueMessageDrivenEndpoint`选项。有关更多信息,请参见[Redis 队列入站通道适配器](./redis.html#redis-queue-inbound-channel-adapter)和[Redis 队列出站通道适配器](./redis.html#redis-queue-outbound-channel-adapter)。 ###### 队列入站网关默认序列化器 为了与出站网关兼容,入站网关中的默认序列化器已更改为`JdkSerializationRedisSerializer`。有关更多信息,请参见[Redis 队列入站网关](./redis.html#redis-queue-inbound-gateway)。 ##### http 更改 在此之前,如果请求的主体(如`POST`)中没有`content-type`头,则主体将被忽略。在此版本中,此类请求的内容类型被认为是 RFC2616 推荐的`application/octet-stream`。有关更多信息,请参见[HTTP 入站组件](./http.html#http-inbound)。 `uriVariablesExpression`现在默认使用`SimpleEvaluationContext`(自 4.3.15 起)。有关更多信息,请参见[映射 URI 变量](./http.html#mapping-uri-variables)。 ##### SFTP 更改 本节描述对 Spring Integration SFTP 功能的一般更改。 ###### 工厂 Bean 我们添加了一个新的工厂 Bean,以简化 SFTP 的 JSCH 代理的配置。有关更多信息,请参见[Proxy Factory Bean](./sftp.html#sftp-proxy-factory-bean)。 ###### `chmod`变更 SFTP 出站网关(用于`put`和`mput`命令)和 SFTP 出站通道适配器现在支持`chmod`属性,以在上传后更改远程文件权限。有关更多信息,请参见`[SFTP Outbound Channel Adapter](./sftp.html#sftp-outbound)`和`[SFTP Outbound Gateway](./sftp.html#sftp-outbound-gateway)`。 ##### FTP 更改 本节描述对 Spring 集成 FTP 功能的一般更改。 ###### 会话变化 `FtpSession`现在支持`null`和`listNames()`方法的`null`,因为底层的 FTP 客户机可以使用它。这样,你就可以在不使用`remoteDirectory`表达式的情况下配置`FtpOutboundGateway`表达式。你也可以配置``而不使用`remote-directory`或`remote-directory-expression`。有关更多信息,请参见[FTP/FTPS 适配器](./ftp.html#ftp)。 ##### 路由器变更 `ErrorMessageExceptionTypeRouter`现在支持`Exception`超类映射,以避免在存在多个继承者的情况下对相同通道进行重复。为此,`ErrorMessageExceptionTypeRouter`在初始化`ClassNotFoundException`的 fail-fast 期间加载映射类。 有关更多信息,请参见[Routers](./router.html#router)。 ##### 标头映射 本节描述了在版本 4.2 和 4.3 之间对头映射的更改。 ###### 一般 AMQP、WS 和 XMPP 头映射(例如`request-header-mapping`和`reply-header-mapping`)现在支持否定模式。有关更多信息,请参见[AMQP 消息头](./amqp.html#amqp-message-headers),[WS 消息头](./ws.html#ws-message-headers)和[XMPP 消息头](./xmpp.html#xmpp-message-headers)。 ###### AMQP 头映射 以前,默认情况下只对标准的 AMQP 头进行映射。你必须显式地启用用户定义标头的映射。在这个版本中,默认情况下所有的头都是映射的。此外,入站`amqp_deliveryMode`头在默认情况下不再映射。有关更多信息,请参见[AMQP 消息头](./amqp.html#amqp-message-headers)。 ##### Groovy 脚本 现在可以使用`compile-static`提示或任何其他`CompilerConfiguration`选项配置 Groovy 脚本。有关更多信息,请参见[Groovy 配置](./groovy.html#groovy-config)。 ##### `@InboundChannelAdapter`变化 `@InboundChannelAdapter`现在为常规的`value`提供了一个别名`channel`属性。此外,目标`SourcePollingChannelAdapter`组件现在可以从其提供的名称(`outputChannel` Bean 选项)以后期绑定的方式解析目标`outputChannelName`。有关更多信息,请参见[注释支持](./configuration.html#annotations)。 ##### XMPP 更改 XMPP 通道适配器现在支持 XMPP 扩展。有关更多信息,请参见[XMPP 扩展](./xmpp.html#xmpp-extensions)。 ##### 窃听延迟绑定 `WireTap``ChannelInterceptor`现在可以接受一个`channelName`,它将在以后的第一次活动拦截器操作期间解析为目标`MessageChannel`。有关更多信息,请参见[Wire Tap](./channel.html#channel-wiretap)。 ##### `ChannelMessageStoreQueryProvider`变化 `ChannelMessageStoreQueryProvider`现在支持 H2 数据库。有关更多信息,请参见[支持消息通道](./jdbc.html#jdbc-message-store-channels)。 ##### WebSocket 变化 `ServerWebSocketContainer`现在公开一个`allowedOrigins`选项,`SockJsServiceOptions`公开一个`suppressCors`选项。有关更多信息,请参见[WebSockets 支持](./web-sockets.html#web-sockets)。 ### 4.1 和 4.2 之间的变化 有关可能影响应用程序的重要更改,请参见[迁移指南](https://github.com/spring-projects/spring-integration/wiki/Spring-Integration-4.1-to-4.2-Migration-Guide)。你可以在[wiki](https://github.com/spring-projects/spring-integration/wiki)上找到所有回到 2.1 版本的迁移指南。 #### 新组件 版本 4.2 增加了一些新的组件。 ##### 主要管理/JMX 返工 我们添加了一个新的`MetricsFactory`策略界面。这一变化以及 JMX 和管理基础设施中的其他变化,为管理配置和运行时性能提供了更多的控制。 然而,这对(某些)用户环境有一些重要的影响。 有关完整的详细信息,请参见[度量和管理](./metrics.html#metrics-management)和[JMX 改进](./jmx.html#jmx-42-improvements)。 ##### MongoDB 元数据存储 `MongoDbMetadataStore`现在可用。有关更多信息,请参见[MongoDB 元数据存储](./mongodb.html#mongodb-metadata-store)。 ##### 安全通道注释 我们引入了`@SecuredChannel`注释,替换了不推荐的`ChannelSecurityInterceptorFactoryBean`。有关更多信息,请参见[Security in Spring Integration](./security.html#security)。 ##### `SecurityContext`传播 我们为从一个消息流的线程传播到另一个消息流的`SecurityContext`引入了`SecurityContextPropagationChannelInterceptor`。有关更多信息,请参见[Security in Spring Integration](./security.html#security)。 ##### 文件夹 在 4.1.2 中,我们添加了`FileSplitter`,它将文本文件分割成行。它现在在`int-file:`命名空间中获得了完全支持。有关更多信息,请参见[文件拆分器](./file.html#file-splitter)。 ##### 动物园管理员支持 我们在框架中添加了 ZooKeeper 支持,以在集群或多主机环境中运行时提供帮助。这一变化影响到以下特征: * `ZookeeperMetadataStore` * `ZookeeperLockRegistry` * 动物园管理员领导 有关更多信息,请参见[动物园管理员支持](./zookeeper.html#zookeeper)。 ##### 螺纹屏障 一个新的线程``组件是可用的,它允许一个线程被挂起,直到某个异步事件发生。有关更多信息,请参见[螺纹屏障](./barrier.html#barrier)。 ##### stomp 支持 我们将 STOMP 支持添加到框架中,作为入站和出站通道适配器对。有关更多信息,请参见[Stomp 支持](./stomp.html#stomp)。 ##### 编解码器 引入了一个新的`Codec`抽象,用于对`Codec`之间的对象进行编码和解码。我们添加了一个使用 Kryo 的实现。我们还添加了基于编解码的变压器和消息转换器。有关更多信息,请参见[Codec](./codec.html#codec)。 ##### 消息 PreparedStatement setter 一个新的`MessagePreparedStatementSetter`函数接口回调可用于`JdbcMessageHandler`(``和``),作为使用`SqlParameterSourceFactory`填充`PreparedStatement`上下文上的参数的一种替代方法。有关更多信息,请参见[出站通道适配器](./jdbc.html#jdbc-outbound-channel-adapter)。 #### 一般变动 本部分描述了从版本 4.1 到版本 4.2 的一般更改。 ##### 窃听 作为现有`selector`属性的替代选项,``元素现在支持`selector-expression`属性。 ##### 文件更改 有关这些更改的更多信息,请参见[文件支持](./file.html#files)。 ###### 追加新行 ``和``现在支持`append-new-line`属性。如果设置为`true`,则在写入消息后会在文件中添加新的行。默认属性值是`false`。 ###### 忽略隐藏文件 我们为``添加了`ignore-hidden`属性,使你可以设置是否从源目录中获取隐藏的文件。它默认为`true`。 ###### 写入`InputStream`有效载荷 `FileWritingMessageHandler`现在也接受`InputStream`作为有效的消息有效负载类型。 ###### `HeadDirectoryScanner` 你现在可以将`HeadDirectoryScanner`与其他`FileListFilter`实现一起使用。 ###### 上次修改的过滤器 我们添加了`LastModifiedFileListFilter`。 ###### 手表服务目录扫描仪 我们添加了`WatchServiceDirectoryScanner`。 ###### 持久文件列表过滤器更改 `AbstractPersistentFileListFilter`具有一个新属性(`flushOnUpdate`),当将其设置为`true`时,如果实现`Flushable`(例如,`PropertiesPersistingMetadataStore`),则在元数据存储上调用`flush()`。 ##### 类包更改 我们将`org.springframework.integration.scattergather`类从`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 连接事件](./ip.html#tcp-events)。 ###### TCP 服务器端口 如果将 TCP 服务器套接字工厂配置为侦听随机端口,那么现在可以通过使用`getPort()`获得 OS 选择的实际端口。`getServerSocketAddress()`也是可用的。 有关更多信息,请参见“[TCP 连接工厂](./ip.html#tcp-connection-factories)”。 ###### TCP 网关远程超时 `TcpOutboundGateway`现在支持`remote-timeout-expression`作为现有`remote-timeout`属性的替代选项。这允许根据每条消息设置超时。 此外,`remote-timeout`不再默认为与`reply-timeout`相同的值,这具有完全不同的含义。 有关更多信息,请参见[.TCP 出站网关属性](./ip.html#tcp-ob-gateway-attributes)。 ###### TCP SSLSession 可用于头映射 `TcpConnection`实现现在支持`getSslSession()`,让你从会话中提取信息以添加到消息头中。有关更多信息,请参见`null`。 ###### TCP 事件 现在,每当出现关联异常时,就会发布新的事件——例如向不存在的套接字发送消息。 `TcpConnectionEventListeningMessageProducer`不受欢迎。使用泛型事件适配器。 有关更多信息,请参见[TCP 连接事件](./ip.html#tcp-events)。 ##### `@InboundChannelAdapter`变更 以前,入站通道适配器上的`@Poller`将`TcpNxxConnection`属性默认为`-1`(无穷大)。这与``的 XML 配置不一致,后者缺省为`1`。注解现在默认此属性为`1`。 ##### API 更改 `o.s.integration.util.FunctionIterator`现在需要一个`o.s.integration.util.Function`,而不是一个`reactor.function.Function`。这样做是为了消除对反应堆不必要的硬性依赖。这个迭代器的任何使用都需要更改导入。 对于`Promise`网关等功能,仍然支持 Reactor。对于那些不需要该依赖项的用户,该依赖项已被删除。 ##### JMS 更改 本节描述对 Spring Integration TCP 功能的一般更改。 ###### 回复侦听器惰性初始化 现在,你可以将 JMS 出站网关中的应答侦听器配置为按需初始化,并在空闲一段时间后停止,而不是由网关的生命周期来控制。有关更多信息,请参见[出站网关](./jms.html#jms-outbound-gateway)。 ###### 消息驱动端点中的转换错误 `error-channel`现在用于转换错误。在以前的版本中,它们会导致事务回滚和消息重新交付。 有关更多信息,请参见[消息驱动通道适配器](./jms.html#jms-message-driven-channel-adapter)和`confirm-ack-channel`。 ###### 默认确认模式 当使用隐式定义的`DefaultMessageListenerContainer`时,默认的`acknowledge`现在是`transacted`。我们建议在使用此容器时使用`transacted`,以避免消息丢失。这个默认值现在应用于消息驱动的入站适配器和入站网关。它已经是 JMS 支持的通道的默认设置。 有关更多信息,请参见[消息驱动通道适配器](./jms.html#jms-message-driven-channel-adapter)和。 ###### `@EnableIntegration`共享订阅 我们向消息驱动的端点和``添加了对共享订阅(JMS2.0)的命名空间支持。以前,你必须将侦听器容器连接为``声明,以使用共享连接。 有关更多信息,请参见`default-reply-to`。 ##### 条件 Pollers 现在,我们为动态轮询提供了更大的灵活性。 有关更多信息,请参见[消息源的条件 Poller](./polling-consumer.html#conditional-pollers)。 ##### AMQP 变化 本节描述 Spring 集成 AMQP 功能的一般更改。 ###### 发布者确认 ``现在支持`confirm-correlation-expression`、`confirm-ack-channel`和`confirm-nack-channel`属性(其目的类似于``)。 ###### 相关数据 对于出站通道适配器和入站网关,如果相关数据是`Message`,则它将成为 ACK 或 NACK 通道上消息的基础,并添加额外的头。以前,任何相关数据(包括`Message`)都作为 ACK 或 NACK 消息的有效负载返回。 ###### 入站网关属性 ``现在公开`amqp-template`属性,以允许对外部 Bean 的答复`o.s.integration.util.Function`进行更多控制。你还可以提供自己的`AmqpTemplate`实现。此外,如果请求消息没有`replyTo`属性,则可以使用`default-reply-to`。 有关更多信息,请参见[AMQP 支持](./amqp.html#amqp)。 ##### XPath 拆分器改进 现在,`XPathMessageSplitter`(``)允许为内部`output-properties`配置`output-properties`,并支持用于 XPath 评估`Iterator`结果的`true`模式(默认为`true`)。 有关更多信息,请参见[分割 XML 消息](./xml.html#xml-xpath-splitting)。 ##### http 更改 本节描述对 Spring 集成 HTTP 功能的一般更改。 ###### CORS HTTP 入站端点(``和``)现在允许跨源资源共享的配置。 有关更多信息,请参见[跨源资源共享支持](./http.html#http-cors)。 ###### 入站网关超时 你可以将 HTTP 入站门方式配置为在请求超时时返回指定的状态码。现在的默认值是`500 Internal Server Error`,而不是`200 OK`。 有关更多信息,请参见[响应状态代码](./http.html#http-response-statuscode)。 ###### 表单数据 我们添加了代理`multipart/form-data`请求的文档。有关更多信息,请参见[HTTP 支持](./http.html#http)。 ##### 网关更改 本节描述对 Spring 集成网关功能的一般更改。 ###### 网关方法可以返回`CompletableFuture` 当使用 Java8 时,网关方法现在可以返回`CompletableFuture`。有关更多信息,请参见[`CompletableFuture`](./gateway.html#gw-completable-future)。 ###### MessagingGateway 注释 请求和回复超时属性现在是,而不是`Long`,以允许使用属性占位符或 SPEL 进行配置。参见[`@MessagingGateway`注释]。 ##### 聚合器更改 本节描述对 Spring 集成聚合器功能的一般更改。 ###### 聚合器性能 该版本通过在发布组消息时更有效地从组中删除消息,对聚合组件(聚合器、重排序程序和其他组件)进行了一些性能改进。新的方法(`removeMessagesFromGroup`)已添加到消息存储中。设置`removeBatchSize`属性(默认:`CompletableFuture`)以调整每个操作中删除的消息数量。目前,JDBC、Redis 和 MongoDB 消息存储支持此属性。 ###### 输出消息组处理器 当使用`ref`或 inner Bean 作为聚合器时,现在可以直接绑定`MessageGroupProcessor`。此外,我们还添加了一个`SimpleMessageGroupProcessor`,它传回组中的消息集合。当输出处理器生成`@MessagingGateway`的集合时,聚合器将单独释放这些消息。配置`SimpleMessageGroupProcessor`会使聚合器成为消息屏障,在这里,消息会一直保留到所有消息到达,然后单独发布。有关更多信息,请参见[Aggregator](./aggregator.html#aggregator)。 ##### FTP 和 SFTP 更改 本节描述对 Spring 集成 FTP 和 SFTP 功能的一般更改。 ###### 入站通道适配器 现在可以在入站通道适配器上指定`remote-directory-expression`,以在运行时确定目录。有关更多信息,请参见[FTP/FTPS 适配器](./ftp.html#ftp)和[SFTP 适配器](./sftp.html#sftp)。 ###### 网关部分结果 当你使用 FTP 或 SFTP 出站网关对多个文件(使用`mget`和`mput`)进行操作时,在部分请求完成后可能会发生异常。如果出现这样的条件,将抛出一个包含部分结果的`PartialSuccessException`。有关更多信息,请参见[FTP 出站网关](./ftp.html#ftp-outbound-gateway)和[SFTP 出站网关](./sftp.html#sftp-outbound-gateway)。 ###### 委托会话工厂 我们添加了一个委托会话工厂,允许基于某些线程上下文值来选择特定的会话工厂。 有关更多信息,请参见[Delegating Session Factory](./ftp.html#ftp-dsf)和[Delegating Session Factory](./sftp.html#sftp-dsf)。 ###### 默认 SFTP会话工厂 以前,`DefaultSftpSessionFactory`无条件地允许与未知主机的连接。这现在是可配置的(默认值:`false`)。 工厂现在需要一个已配置的`knownHosts`,文件,除非`allowUnknownKeys`属性是`true`(默认:`false`)。 有关更多信息,请参见[`allowUnknownKeys`::设置为`true`以允许使用未知(或更改)密钥的主机连接。]。 ###### 消息会话回调 我们引入了`MessageSessionCallback`以在``中使用`requestMessage`上下文执行任何自定义`Session`操作。 有关更多信息,请参见[使用`MessageSessionCallback`](./ftp.html#ftp-会话-callback)和[MessagesessionCallback](./sftp.html#sftp-session-callback)。 ##### WebSocket 变化 我们在`WebSocketHandlerDecoratorFactory`中添加了`ServerWebSocketContainer`支持,以允许对内部`WebSocketHandler`进行链式定制。有关更多信息,请参见[WebSockets 名称空间支持](./web-sockets.html#web-sockets-namespace)。 ##### 应用程序事件适配器更改 `ApplicationEvent`适配器现在可以使用`payload`作为`event`来操作,从而直接允许省略自定义`ApplicationEvent`扩展。为此,我们在``上引入了`publish-payload`布尔属性。有关更多信息,请参见[ Spring `ApplicationEvent`支持]。 ### 4.0 和 4.1 之间的变化 有关可能影响应用程序的重要更改,请参见[迁移指南](https://github.com/spring-projects/spring-integration/wiki/Spring-Integration-4.0-to-4.1-Migration-Guide)。你可以在[wiki](https://github.com/spring-projects/spring-integration/wiki)上找到所有回到 2.1 版本的迁移指南。 #### 新组件 版本 4.1 增加了一些新的组件。 ##### promise\gateway 消息传递网关方法现在支持 reactor`Promise`返回类型。见[异步网关](./gateway.html#async-gateway)。 ##### WebSocket 支持 `WebSocket`模块现已可用。它完全基于 Spring WebSocket 和 Spring 消息传递模块,并提供了``和``。有关更多信息,请参见[WebSockets 支持](./web-sockets.html#web-sockets)。 ##### 散集 Enterprise 集成模式 实现了散集 Enterprise 集成模式。有关更多信息,请参见[分散收集](./scatter-gather.html#scatter-gather)。 ##### 布线滑移模式 我们添加了路由条 EIP 模式的实现。有关更多信息,请参见[布线滑移](./router.html#routing-slip)。 ##### 幂等接收器模式 通过在 XML 中添加[布线滑移](./router.html#routing-slip)组件或在 Java 配置中添加`IdempotentReceiverInterceptor`和`IdempotentReceiver`注释,我们添加了幂等接收器 Enterprise 集成模式实现。有关更多信息,请参见`JsonObjectMapper`和[Javadoc](https://docs.spring.io/spring-integration/api/index.html)。 ##### [布线滑移](./router.html#routing-slip)Boon`JsonObjectMapper` 我们为 JSON Transformers 添加了好处`JsonObjectMapper`。有关更多信息,请参见[变压器](./transformer.html#transformer)。 ##### Redis 队列网关 我们添加了``和``组件。见[Redis 队列入站网关](./redis.html#redis-queue-inbound-gateway)和[Redis 队列出站网关](./redis.html#redis-queue-outbound-gateway)。 ##### `PollSkipAdvice` 我们添加了``,你可以在``的``中使用它来确定当前轮询是否应该被你用`PollSkipStrategy`实现的某些条件所抑制(跳过)。有关更多信息,请参见[Poller](./polling-consumer.html#polling-consumer)。 #### 一般变化 本节描述了从 4.0 到 4.1 版本的一般更改。 ##### AMQP 入站端点,通道 使用消息侦听器容器(入站端点和通道)的元素现在支持`missing-queues-fatal`属性。有关更多信息,请参见[AMQP 支持](./amqp.html#amqp)。 ##### AMQP 出站端点 AMQP 出站端点支持一个名为`lazy-connect`的新属性(默认:`true`)。当`true`时,直到第一条消息到达(假设没有入站端点,这些端点总是在启动过程中尝试建立连接),才会建立到代理的连接。当设置为[Poller](./polling-consumer.html#polling-consumer)时,将在应用程序启动期间尝试建立连接。有关更多信息,请参见[AMQP 支持](./amqp.html#amqp)。 ##### SimpleMessageStore 在调用`getMessageGroup()`时,`SimpleMessageStore`不再复制该组。有关更多信息,请参见[[warning](./message-store.html#sms-caution)。 ##### Web 服务出站网关:`encode-uri` ``现在提供了一个`encode-uri`属性,允许在发送请求之前禁用 URI 对象的编码。 ##### HTTP 入站通道适配器和状态代码 现在可以将``配置为。 ##### MQTT 适配器更改 现在,你可以将 MQTT 通道适配器配置为连接到多个服务器——例如,以支持高可用性。有关更多信息,请参见[MQTT 支持](./mqtt.html#mqtt)。 MQTT 消息驱动通道适配器现在支持为每个订阅指定 QoS 设置。有关更多信息,请参见[入站(消息驱动)通道适配器](./mqtt.html#mqtt-inbound)。 MQTT 出站通道适配器现在支持异步发送,在确认发送之前避免阻塞。有关更多信息,请参见[出站通道适配器](./mqtt.html#mqtt-outbound)。 现在可以在运行时以编程方式订阅和取消订阅主题。有关更多信息,请参见[入站(消息驱动)通道适配器](./mqtt.html#mqtt-inbound)。 ##### FTP 和 SFTP 适配器更改 FTP 和 SFTP 出站通道适配器现在支持追加到远程文件,并在远程文件已经存在时采取特定的操作。远程文件模板现在也支持这一点,以及`rmdir()`和`exists()`。此外,远程文件模板提供了对底层客户机对象的访问,从而能够访问底层 API。 有关更多信息,请参见[FTP/FTPS 适配器](./ftp.html#ftp)和[SFTP 适配器](./sftp.html#sftp)。 ##### 拆分器和迭代器 `Splitter`组件现在支持将`Iterator`作为生成输出消息的结果对象。有关更多信息,请参见[Splitter](./splitter.html#splitter)。 ##### `allowUnknownKeys`聚合器 `Aggregator`Instancess 现在支持一个新属性`expire-groups-upon-timeout`。有关更多信息,请参见[Aggregator](./aggregator.html#aggregator)。 ##### 内容更丰富的改进 我们添加了一个`null-result-expression`属性,如果``返回`null`,则对该属性进行求值并返回。你可以在`
`和``中添加它。有关更多信息,请参见[内容更丰富](./content-enrichment.html#content-enricher)。 我们添加了一个`error-channel`属性,如果`Exception`发生在`request-channel`的下游,该属性将用于处理错误流。这使你可以返回一个替代对象来用于充实。有关更多信息,请参见[内容更丰富](./content-enrichment.html#content-enricher)。 ##### header 通道注册表 ``元素的``子元素现在可以重写 header 通道注册中心保留通道映射的默认时间。有关更多信息,请参见[报头通道注册表](./content-enrichment.html#header-channel-registry)。 ##### 有序关机 我们对有序关机算法进行了改进。有关更多信息,请参见[有序关机](./shutdown.html#jmx-shutdown)。 ##### `RecipientListRouter`的管理 `RecipientListRouter`现在提供了几个管理操作,以在运行时配置收件人。这样,你现在就可以配置``,而不需要从一开始就配置任何``。有关更多信息,请参见[`RecipientListRouterManagement`]。 ##### AbstracTheAderMapper:非 \_Standard\_Headers 令牌 `AbstractHeaderMapper`实现现在提供了额外的`NON_STANDARD_HEADERS`令牌来映射任何用户定义的标头,这些标头在默认情况下是不映射的。有关更多信息,请参见[AMQP 消息头](./amqp.html#amqp-message-headers)。 ##### AMQP 信道:`template-channel-transacted` 我们为 AMQP`MessageChannel`实例引入了`template-channel-transacted`属性。有关更多信息,请参见[AMQP 支持的消息通道](./amqp.html#amqp-channels)。 ##### syslog 适配器 默认的 Syslog 消息转换器现在有一个选项,可以在设置消息头的同时保留有效负载中的原始消息。有关更多信息,请参见[Syslog 入站通道适配器](./syslog.html#syslog-inbound-adapter)。 ##### 异步网关 除了`Promise`返回类型[前面提到过](#x4.1-promise-gateway)外,网关方法现在还可以返回`Promise`,这是 Spring Framework4.0 中介绍的。你还可以在网关中禁用异步处理,让下游流直接返回`Future`。见[异步网关](./gateway.html#async-gateway)。 ##### 聚合器建议链 `Aggregator`和`Resequencer`现在支持``和``子元素来建议`forceComplete`操作。有关更多信息,请参见[使用 XML 配置聚合器](./aggregator.html#aggregator-xml)。 ##### 出站通道适配器和脚本 [重测序器](./resequencer.html#resequencer)现在支持`