更改历史
更改历史
新组件
添加了用于集成流定义的 Groovy DSL 实现。 有关更多信息,请参阅 Groovy DSL。
MQTT 客户端管理器
新的 MQTTClientManager
已添加以支持跨不同通道适配器的可重用 MQTT 连接。
有关更多信息,请参阅共享 MQTT 客户端支持。
GraphQL 支持
添加了 GraphQL 支持。 有关更多信息,请参阅 GraphQL 支持。
Apache Camel 支持
引入了对 Apache Camel 路由的支持。 有关更多信息,请参阅 Apache Camel 支持。
Hazelcast 支持
Hazelcast Spring Integration Extensions 项目已迁移为spring-integration-hazelcast
模块。
有关更多信息,请参阅 Hazelcast 支持。
SMB 支持
Spring Integration Extensions 项目添加了 SMB 支持。
Java DSL(参见org.springframework.integration.smb.dsl.Smb
factory)也已添加到此模块中。
一SmbStreamingMessageSource
和SmbOutboundGateway
介绍了实现。
有关详细信息,请参阅 SMB 支持。
PostgreSQL 推送通知
一个PostgresSubscribableChannel
允许通过以下方式接收推送通知PostgresChannelMessageTableSubscriber
在新消息添加时添加到JdbcChannelMessageStore
.
有关更多信息,请参阅 PostgreSQL:接收推送通知。
RabbitMQ 流队列支持
AMQP 模块已得到增强,可支持使用 RabbitMQ 流队列的入站和出站通道适配器。 有关更多信息,请参阅 RabbitMQ 流队列支持。
阿帕奇 MINA SFTP
SFTP 模块已从过时的 JCraft JSch 库完全重新设计为更强大和现代org.apache.sshd:sshd-sftp
Apache MINA 项目的模块。
有关详细信息,请参阅 SFTP 适配器。
千分尺观察
现在支持使用微分尺启用定时器和跟踪的观察。 有关更多信息,请参阅千分尺观察。
GraalVM 多语言支持
脚本模块现在提供了一个PolyglotScriptExecutor
基于 GraalVM 多语言支持的实现。
JavaScript 支持现在基于此执行器,因为它的 JSR223 实现已自行从 Java 中删除。
有关详细信息,请参阅脚本支持。
Apache Cassandra 支持
Apache Cassandra Spring Integration Extensions 项目已迁移为spring-integration-cassandra
模块。
有关详细信息,请参阅 Apache Cassandra 支持。
原生图像
支持创建 GraalVM 本机映像。 有关详细信息,请参阅本机映像支持。
一般更改
消息传递注释现在是@Repeatable
并且可以在同一服务方法上多次声明相同的类型。
消息传递注释不需要poller
属性作为@Poller
了。
有关更多信息,请参阅注释支持。
为方便起见,用于 Scatter-Gather 的 XML 和 Java DSL 基于RecipientListRouter
,现在将applySequence = true
,因此收集器部分可以依赖默认的关联策略。
有关更多信息,请参阅分散收集。
对AbstractMappingMessageRouter
.
现在,将defaultOutputChannel
还会重置channelKeyFallback
属性设置为false
,因此不会尝试从其键解析通道,但逻辑会立即回退到将消息发送到defaultOutputChannel
.
有关更多信息,请参阅路由器选项。
这AggregatingMessageHandler
now 不会拆分Collection<Message<?>>
结果MessageGroupProcessor
(除非它是SimpleMessageGroupProcessor
)的输出,但发出一条包含整个集合作为有效负载的消息。
有关详细信息,请参阅聚合器。
这IntegrationFlows
factory 现在被标记为已弃用,以支持IntegrationFlow
界面本身。
工厂类将在将来的版本中删除。
有关更多信息,请参阅 Java DSL。
这org.springframework.util.concurrent.ListenableFuture
从 Spring Framework 开始已被弃用6.0
.
所有 Spring Integration 异步 API 都已迁移到CompletableFuture
.
消息网关接口方法现在可以返回Future<Void>
和Mono<Void>
与下游流的适当异步执行。
旁边还有一个@MessagingGateway
注释接口也可以用@Primary
.
@MessagingGateway
接口现在可以用作@Import
用于配置的资源。
网关代理 Bean 的默认命名策略可以通过以下方式进行自定义@IntegrationComponentScan.nameGenerator()
属性。
如果AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR
bean 存在,则在回退到AnnotationBeanNameGenerator
.
有关详细信息,请参阅消息传递网关。
这integrationGlobalProperties
bean 现在被框架声明为org.springframework.integration.context.IntegrationProperties
而不是之前弃用的java.util.Properties
.
生成集合作为回复的消息处理程序(例如JpaOutboundGateway
,JdbcOutboundGateway
和其他基于数据库的网关)现在,如果查询没有返回任何记录,则返回一个空的结果列表。
以前null
返回时结束流或抛出异常,具体取决于requiresReply
.
RMI 移除
这spring-integration-rmi
模块在以前的版本中被弃用后已被完全删除。
没有替代品:建议迁移到更安全的网络和应用程序协议,例如 WebSockets、RSockets、gRPC 或 REST。
GemFire 移除
这spring-integration-gemfire
模块已被完全删除,因为没有 Spring Data2022.0.0
支持 VMware GemFire 或 Apache Geode。
HTTP 更改
这#cookies
表达式评估上下文的变量,在HttpRequestHandlingEndpointSupport
,现在是一个MultiValueMap
携带客户端设置的 cookie 的所有值。
有关更多信息,请参阅 HTTP 支持。
Apache Kafka 更改
当提供RetryTemplate
在入站网关或消息驱动通道适配器上,如果errorChannel
还提供了一个ErrorMessageSendingRecoverer
自动配置。
此外,新的KafkaErrorMessageSendingRecoverer
提供;这可以与DefaultErrorHandler
以避免长时间聚合重试延迟导致分区重新平衡的问题。
有关更多信息,请参阅 Spring for Apache Kafka 支持。
JDBC 更改
这DefaultLockRepository
现在可以提供PlatformTransactionManager
而不是依赖应用程序上下文中的主 Bean。
有关更多信息,请参阅 JDBC 锁定注册表。
TCP/IP 更改
这lookupHost
属性的AbstractConnectionFactory
和DatagramPacketMessageMapper
现在设置为false
默认情况下,以避免在未配置 DNS 的环境中出现延迟。
有关详细信息,请参阅 TCP 和 UDP 支持。
JMS 更改
这JmsOutboundGateway
现在会创建一个TemporaryTopic
而不是TemporaryQueue
如果replyPubSubDomain
选项设置为true
.
有关更多信息,请参阅 JMS 支持。
安全更改
这ChannelSecurityInterceptor
及其注释@SecuredChannel
和 XML<secured-channels>
配置已被弃用,取而代之的是AuthorizationChannelInterceptor
.
有关详细信息,请参阅安全支持。
新组件
文件聚合器
一个FileSplitter.FileMaker
-基于实现CorrelationStrategy
,ReleaseStrategy
和MessageGroupProcessor
作为FileAggregator
组件被引入。
有关详细信息,请参阅 File Aggregator。
MQTT v5 支持
这Mqttv5PahoMessageDrivenChannelAdapter
和Mqttv5PahoMessageHandler
(包括各自MqttHeaderMapper
)的引入,以支持 MQTT v5 协议通信。
有关更多信息,请参阅 MQTT v5 支持。
一般更改
所有执着的MessageGroupStore
实现提供了一个streamMessagesForGroup(Object groupId)
基于目标数据库流 API 的合约。
有关详细信息,请参阅消息存储。
这integrationGlobalProperties
bean(如果声明)现在必须是org.springframework.integration.context.IntegrationProperties
而不是java.util.Properties
,该支持已弃用,以向后兼容。
这spring.integration.channels.error.requireSubscribers=true
global 属性的添加,以指示全局默认值errorChannel
必须配置requireSubscribers
选项(或不选项)。
这spring.integration.channels.error.ignoreFailures=true
global 属性的添加,以指示全局默认值errorChannel
必须忽略(或不忽略)分派错误并将消息传递给下一个处理程序。
有关详细信息,请参阅全局属性。
一AbstractPollingEndpoint
(源轮询通道适配器和轮询使用者)处理maxMessagesPerPoll == 0
跳过调用源。
稍后可以将其更改为不同的值,例如通过控制总线。
有关详细信息,请参阅轮询消费者。
这ConsumerEndpointFactoryBean
现在接受一个reactiveCustomizer
Function
到任何输入通道作为反应流源,并使用ReactiveStreamsConsumer
下面。
这被涵盖为ConsumerEndpointSpec.reactive()
选项,作为 Java DSL 中的@Reactive
消息传递注释的嵌套注释。
有关更多信息,请参阅响应式流支持。
这groupTimeoutExpression
对于相关消息处理程序(Aggregator
和Resequencer
) 现在可以计算为java.util.Date
适用于一些细粒度的调度用例。
此外,BiFunction groupConditionSupplier
选项添加到AbstractCorrelatingMessageHandler
提供MessageGroup
条件。
有关详细信息,请参阅聚合器。
这MessageGroup
抽象可以提供一个condition
稍后评估,为小组做出决定。
有关详细信息,请参阅消息组条件。
集成流组合
新的IntegrationFlows.from(IntegrationFlow)
添加了工厂方法以允许启动当前IntegrationFlow
从现有流的输出。
此外,IntegrationFlowDefinition
添加了一个to(IntegrationFlow)
终端运算符,以继续在其他流的输入通道处流动电流。
有关详细信息,请参阅集成流组合。
AMQP 更改
这AmqpInboundChannelAdapter
和AmqpInboundGateway
(以及相应的 Java DSL 构建器)现在支持org.springframework.amqp.rabbit.retry.MessageRecoverer
作为通用的 AMQP 特定替代方案RecoveryCallback
.
有关详细信息,请参阅 AMQP 支持。
Redis 更改
这ReactiveRedisStreamMessageProducer
现在有所有StreamReceiver.StreamReceiverOptionsBuilder
选项,包括onErrorResume
功能。
有关更多信息,请参阅 Redis 支持。
HTTP 更改
这HttpRequestExecutingMessageHandler
不会回退到application/x-java-serialized-object
内容类型,并允许RestTemplate
根据HttpMessageConverter
提供。
它现在还有一个extractResponseBody
标志(即true
默认情况下)仅返回响应正文,或返回整个ResponseEntity
作为回复消息有效负载,独立于提供的expectedResponseType
.
同样的选项也适用于WebFluxRequestExecutingMessageHandler
太。
有关更多信息,请参阅 HTTP 支持。
文件/FTP/SFTP 更改
持久文件列表过滤器现在具有布尔属性forRecursion
.
将此属性设置为true
,也设置alwaysAcceptDirectories
,这意味着出站网关上的递归作 (ls
和mget
) 现在每次都会遍历完整的目录树。
这是为了解决未检测到目录树深处更改的问题。
另外forRecursion=true
导致文件的完整路径用作元数据存储键;这解决了如果具有相同名称的文件多次出现在不同目录中,则过滤器无法正常工作的问题。
重要提示:这意味着对于顶级目录下的文件,将找不到持久元数据存储中的现有密钥。
因此,该属性是false
默认情况下;这可能会在将来的版本中更改。
这FileInboundChannelAdapterSpec
现在有一个方便的recursive(boolean)
选项,而不是要求显式引用RecursiveDirectoryScanner
.
这remoteDirectoryExpression
现在可以在mv
为了方便起见,命令。
MongoDb 更改
这MongoDbMessageSourceSpec
被添加到 MongoDd Java DSL 中。
一update
选项现在在MongoDbMessageSource
和ReactiveMongoDbMessageSource
实现。
有关更多信息,请参阅 MongoDb 支持。
网关更改
以前,在使用 XML 配置时,@Gateway.payloadExpression
对于无参数方法被忽略。
有一个可能的重大更改 - 如果该方法使用@Payload
以及@Gateway
(使用不同的表达式)之前,@Payload
将应用,现在@Gateway.payloadExpression
被应用。
有关详细信息,请参阅使用注释和 XML 进行网关配置和调用无参数方法。
新组件
Apache Kafka 的通道适配器
独立的 Spring Integration for Apache Kafka 项目已合并为spring-integration-kafka
模块添加到此项目。
这KafkaProducerMessageHandler
sendTimeoutExpression
默认值已更改。
您现在可以访问Future<?>
对于基础send()
操作。
有关更多信息,请参阅 Spring for Apache Kafka 支持。
R2DBC 通道适配器
引入了用于 R2DBC 数据库交互的通道适配器。 有关更多信息,请参阅 R2DBC 支持。
Redis Stream 支持
引入了 Redis Stream 支持的通道适配器。 有关详细信息,请参阅 Redis Stream 出站通道适配器。
可续期锁注册表
引入了可续订锁注册表,以允许续订分布式锁的租约。 有关更多信息,请参阅 JDBC 实现。
ZeroMQ 支持
ZeroMqChannel
,ZeroMqMessageHandler
和ZeroMqMessageProducer
已被引入。
有关更多信息,请参阅 ZeroMQ 支持。
一般更改
单向消息传递网关(void
方法返回类型)现在将nullChannel
显式地将replyChannel
标头以忽略任何可能的下游回复。
有关详细信息,请参阅设置默认回复通道。
此外,网关方法调用程序 (GatewayProxyFactoryBean.MethodInvocationGateway
) 现在以网关代理 Bean 名称和方法签名的组合形式提供托管 Bean 名称。
例如:sampleGateway#echo(String)
.
这会影响为网关方法调用公开的消息历史记录和指标,并在应用程序上下文的启动和关闭期间提供细粒度日志。
聚合器(和重新排序器)现在可以使孤立组(持久存储中的组过期,其中应用程序重新启动后没有新消息到达)。 有关详细信息,请参阅聚合器过期组。
被千分尺仪取代的旧指标已被删除。
线程屏障现在有两个单独的超时选项:requestTimeout
和triggerTimeout
.
TCP/UDP 更改
连接工厂现在支持多个发送组件 (TcpSender
);它们仍然仅限于一个接收组件 (TcpListener
).
例如,这允许入站网关和出站通道适配器共享同一个工厂,支持从服务器到客户端的请求/回复和任意消息传递。
共享工厂不应与出站网关一起使用,除非一次性连接或ThreadAffinityClientConnectionFactory
正在使用。
有关详细信息,请参阅协作通道适配器和 TCP 网关。
现在可以将 UDP 通道适配器配置为SocketCustomizer
这允许设置适配器不直接支持的套接字属性。
有关更多信息,请参阅 UDP 适配器。
AMQP 更改
出站终结点现在具有处理发布者确认和返回的新机制。 有关详细信息,请参阅发布者确认和退货的替代机制。
一个新的BatchMode.EXTRACT_PAYLOAD_WITH_HEADERS
由AmqpInboundChannelAdapter
.
有关更多信息,请参阅入站通道适配器。
邮件更改
这AbstractMailReceiver
现在可以生成MimeMessage
按原样,无需急于获取其内容。
有关更多信息,请参阅邮件接收通道适配器。
新组件
集成模式
这IntegrationPattern
引入了抽象来指示哪种企业集成模式(IntegrationPatternType
)和 Spring Integration 组件所属的类别。
有关此抽象及其用例的更多信息,请参阅其 JavaDocs 和 Integration Graph。
ReactiveMessageHandler
这ReactiveMessageHandler
现在在框架中原生支持。
有关详细信息,请参阅 ReactiveMessageHandler。
ReactiveMessageSourceProducer
这ReactiveMessageSourceProducer
是MessageProducerSupport
将提供的MessageSource
变成一个Flux
按需receive()
调用。
有关更多信息,请参阅响应式流支持。
Java DSL 扩展
一个新的IntegrationFlowExtension
引入了 API,允许使用自定义或组合的 EIP 运算符扩展现有的 Java DSL。
这也可用于为任何开箱即用的定制器引入定制器IntegrationComponentSpec
扩展。
有关详细信息,请参阅 DSL 扩展。
Kotlin DSL
引入了用于集成流配置的 Kotlin DSL。 有关更多信息,请参阅 Kotlin DSL 章节。
ReactiveRequestHandler建议
一个ReactiveRequestHandlerAdvice
提供定制Mono
来自消息处理程序的回复。
有关更多信息,请参阅反应性建议。
HandleMessageAdviceAdapter
一个HandleMessageAdviceAdapter
提供以包装任何MethodInterceptor
用于申请MessageHandler.handleMessage()
而不是默认值AbstractReplyProducingMessageHandler.RequestHandler.handleRequestMessage()
行为。
有关详细信息,请参阅处理消息通知。
MongoDB 响应式通道适配器
这spring-integration-mongodb
模块现在为 Spring Data 中的 Reactive MongoDb 驱动程序支持提供通道适配器实现。
此外,MongoDb 更改流支持的响应式实现也存在于MongoDbChangeStreamMessageProducer
.
有关更多信息,请参阅 MongoDB 支持。
接收消息建议
一个特别的ReceiveMessageAdvice
已经被引入代理MessageSource.receive()
或PollableChannel.receive()
.
有关更多信息,请参阅智能轮询。
一般更改
网关代理现在不代理default
方法。
看调用default
方法了解更多信息。
内部组件(例如_org.springframework.integration.errorLogger
) 现在在积分图中表示时具有缩写的名称。
有关更多信息,请参阅集成图。
在聚合器中,当MessageGroupProcessor
返回一个Message
这MessageBuilder.popSequenceDetails()
如果sequenceDetails
匹配组第一封邮件中的标头。
有关详细信息,请参阅聚合器编程模型。
一个新的publishSubscribeChannel()
运算符,基于BroadcastCapableChannel
和BroadcastPublishSubscribeSpec
,已添加到 Java DSL 中。
当我们将子流配置为代理支持的通道(如)的发布-订阅订阅者时,这种流畅的 API 具有其优势SubscribableJmsChannel
,SubscribableRedisChannel
等。
有关更多信息,请参阅子流支持。
Spring Integration 中的事务支持现在还包括用于配置ReactiveTransactionManager
如果MessageSource
或MessageHandler
实现会生成一个响应式类型供有效负载发送。
看TransactionInterceptorBuilder
了解更多信息。
另请参阅响应式事务。
一个新的intercept()
运营商注册ChannelInterceptor
未创建显式通道的实例被添加到 Java DSL 中。
有关更多信息,请参阅运算符 intercept() 。
这MessageStoreSelector
具有比较新旧值的新机制。
请参阅幂等接收方企业集成模式以获取更多信息。
这MessageProducerSupport
基类现在有一个subscribeToPublisher(Publisher<? extends Message<?>>)
允许实现消息驱动的生产者端点,这些端点通过响应式发出消息Publisher
.
有关更多信息,请参阅响应式流支持。
AMQP 更改
出站通道适配器具有新属性multiSend
允许在一条消息的范围内发送多条消息RabbitTemplate
调用。
有关详细信息,请参阅 AMQP 出站通道适配器。
入站通道适配器现在支持侦听器容器,其中包含consumerBatchEnabled
属性设置为true
.
请参阅 AMQP 入站通道适配器
HTTP 更改
这encodeUri
属性AbstractHttpRequestExecutingMessageHandler
已被弃用,取而代之的是新引入的encodingMode
.
看DefaultUriBuilderFactory.EncodingMode
JavaDocs 和 Controlling URI Encoding 了解更多信息。
这也会影响WebFluxRequestExecutingMessageHandler
,分别是 Java DSL 和 XML 配置。
相同的选项被添加到AbstractWebServiceOutboundGateway
.
Web 服务更改
已为 Web 服务组件添加了 Java DSL 支持。
这encodeUri
属性AbstractWebServiceOutboundGateway
已被弃用,取而代之的是新引入的encodingMode
- 类似于上面的 HTTP 更改。
有关更多信息,请参阅 Web 服务支持。
TCP 更改
这FailoverClientConnectionFactory
默认情况下,不再故障回复,直到当前连接失败。
有关详细信息,请参阅 TCP 故障转移客户端连接工厂。
这TcpOutboundGateway
现在支持异步请求/回复。有关详细信息,请参阅 TCP 网关。
您现在可以配置客户端连接以对新连接执行一些任意测试。有关详细信息,请参阅测试连接。
RSocket 更改
一个decodeFluxAsUnit
选项已添加到RSocketInboundGateway
具有解码传入的含义Flux
作为单个单元,或对其中的每个事件应用解码。有关详细信息,请参阅 RSocket 入站网关。
Zookeeper 更改
一个LeaderInitiatorFactoryBean
(以及它的 XML<int-zk:leader-listener>
) 公开了一个candidate
选项,以更好地控制Candidate
配置。 有关更多信息,请参阅领导事件处理。
MQTT 变更
现在可以将入站通道适配器配置为提供用户对消息何时被确认为已传递的控制。有关更多信息,请参阅手动确认。
出站适配器现在发布MqttConnectionFailedEvent
当无法创建连接或丢失连接时。以前,只有入站适配器这样做。请参阅 MQTT 事件。
文件更改
这FileSplitter
不再需要 Jackson 处理器(或类似)依赖项markersJson
模式。 它使用SimpleJsonSerializer
对于FileSplitter.FileMarker
实例。 有关详细信息,请参阅 FileSplitter。
行为变化
请参阅迁移指南,了解此版本中的行为更改。
新组件
RSocket 支持
这spring-integration-rsocket
模块现在可用于通道适配器实现,以支持 RSocket 协议。
有关详细信息,请参阅 RSocket 支持。
速率限制建议支持
这RateLimiterRequestHandlerAdvice
现在可用于限制处理程序的请求速率。
有关更多信息,请参阅速率限制器建议。
缓存建议支持
这CacheRequestHandlerAdvice
现在可用于在处理程序上缓存请求结果。
有关更多信息,请参阅缓存建议。
Kotlin 脚本支持
JSR223 脚本模块现在包括对 Kotlin 脚本的支持。 有关详细信息,请参阅脚本支持。
助焊剂聚合器支持
这FluxAggregatorMessageHandler
现在可用于基于 Project Reactor 的消息逻辑分组和窗口化Flux
运营商。
有关更多信息,请参阅 Flux Aggregator。
FTP/SFTP 事件发布者
FTP 和 SFTP 模块现在为某些 Apache Mina FTP/SFTP 服务器事件提供事件侦听器。 有关更多信息,请参阅 Apache Mina FTP 服务器事件和 Apache Mina SFTP 服务器事件。
Avro 转换器
现在提供了简单的 Apache Avro 转换器。 有关更多信息,请参阅 Avro Transformers。
一般更改
这JsonToObjectTransformer
现在支持目标对象反序列化为的泛型。
有关更多信息,请参阅 JSON 转换器。
这splitter
现在支持discardChannel
配置选项。
有关更多信息,请参阅拆分器。
控制总线现在可以处理Pausable
(扩展Lifecycle
)作。
请参阅控制总线以了解更多信息。
这Function<MessageGroup, Map<String, Object>>
为聚合器组件引入了合并和计算输出消息标头的策略。
有关详细信息,请参阅聚合器编程模型。
所有MessageHandlingException
现在包括一个 bean 资源和源代码,用于在不涉及最终用户代码的情况下回溯配置部分。
有关详细信息,请参阅错误处理。
为了获得更好的最终用户体验,Java DSL 现在提供了一个配置器变体,用于使用网关接口启动流。
看IntegrationFlows.from(Class<?> serviceInterface, Consumer<GatewayProxySpec> endpointConfigurer)
JavaDocs 了解更多信息。
还有一个MethodArgsHolder
现在是GatewayProxyFactoryBean
.
这#args
和#method
评估上下文变量现已弃用。
有关详细信息,请参阅消息传递网关。
AMQP 更改
现在可以将出站终结点配置为在超时内未收到发布者确认时合成“nack”。 有关详细信息,请参阅出站通道适配器。
入站通道适配器现在可以接收批处理消息作为List<?>
有效负载,而不是接收每个批处理片段的离散消息。
有关详细信息,请参阅批处理消息。
现在可以将出站通道适配器配置为阻止调用线程,直到收到发布者确认(确认)。 有关详细信息,请参阅出站通道适配器。
文件更改
对过滤远程文件进行了一些改进。 有关更多信息,请参阅远程持久文件列表过滤器。
TCP 更改
长度标头ByteArrayLengthHeaderSerializer
现在除了有效负载之外,还可以包括标头的长度。
有关详细信息,请参阅消息分界(序列化程序和反序列化程序)。
使用TcpNioServerConnectionFactory
,现在优先接受新连接而不是从现有连接读取,但它是可配置的。
有关详细信息,请参阅关于非阻塞 I/O (NIO)。
出站网关具有新属性closeStreamAfterSend
;当与每个请求/回复的新连接一起使用时,它会向服务器发出 EOF 信号,而不会关闭连接。
这对于使用 EOF 来表示消息结束而不是数据中的某些分隔符的服务器非常有用。
有关详细信息,请参阅 TCP 网关。
客户端连接工厂现在支持connectTimeout
如果在此时间内未建立连接,则会导致引发异常。
有关更多信息,请参阅 TCP 连接工厂。
SoftEndOfStreamException
现在是一个RuntimeException
而不是扩展IOException
.
邮件更改
这AbstractMailReceiver
现在有一个autoCloseFolder
选项 (true
默认情况下),以禁用自动文件夹在获取后关闭,但填充IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE
标头,而不是用于下游交互。
有关更多信息,请参阅邮件接收通道适配器。
HTTP 更改
HTTP 入站终结点现在支持请求有效负载验证。 有关更多信息,请参阅 HTTP 支持。
WebFlux 更改
这WebFluxRequestExecutingMessageHandler
现在支持Publisher
,Resource
和MultiValueMap
作为请求消息payload
.
这WebFluxInboundEndpoint
现在支持请求有效负载验证。
有关更多信息,请参阅 WebFlux 支持。
MongoDb 更改
这MongoDbMessageStore
现在可以使用自定义转换器进行配置。
有关更多信息,请参阅 MongoDB 支持。
路由器更改
您现在可以禁用回退到通道键作为通道 Bean 名称。 有关详细信息,请参阅动态路由器。
5.0 和 5.1 之间的更改
新组件
以下组件是 5.1 中的新增组件:
AmqpDedicatedChannelAdvice
请参阅严格消息排序。
@LongRunningTest
一个 JUnit 5@LongRunningTest
提供条件注释以检查RUN_LONG_INTEGRATION_TESTS
条目,值为true
以确定是否应运行或跳过测试。
请参阅 JUnit 规则和条件。
一般更改
在 5.1 版中进行了以下更改:
Java DSL
这IntegrationFlowContext
现在是一个接口,并且IntegrationFlowRegistration
是IntegrationFlowContext
.
一个新的logAndReply()
引入运算符是为了方便您希望在请求-回复配置的流结束时进行日志记录。
这避免了与log()
它被视为单向端流组件。
为任何NamedComponent
集成流现在基于组件类型,以便可视化工具、日志分析器和指标收集器具有更好的可读性。
这GenericHandler.handle()
现在除了MessageHeaders
type 为第二个参数。
调度程序异常
捕获并重新引发的异常AbstractDispatcher
现在更加一致:
-
一个
MessagingException
任何类型的failedMessage
属性被重新抛出,原封不动。 -
所有其他异常都包装在
MessageDeliveryException
使用failedMessage
属性集。
以前:
-
一个
MessagingException
任何类型的failedMessage
财产被重新抛弃,原封不动 -
一个
MessagingException
没有failedMessage
属性被包装在MessagingException
使用failedMessage
属性集。 -
其他
RuntimeException
实例被重新抛出,保持不变。 -
检查的异常被包装在
MessageDeliveryException
使用failedMessage
属性集。
全球通道拦截器
全局通道拦截器现在适用于动态注册的通道,例如通过IntegrationFlowContext
使用 Java DSL 或使用beanFactory.initializeBean()
.
以前,在刷新应用程序上下文后创建 Bean 时,不会应用拦截器。
通道拦截器
ChannelInterceptor.postReceive()
当没有收到消息时,不再调用;不再需要检查null
Message<?>
.
以前,调用了该方法。
如果你有一个依赖于先前行为的拦截器,请实现afterReceiveCompleted()
相反,由于调用了该方法,因此无论是否收到消息。
此外,PolledAmqpChannel
和PolledJmsChannel
以前没有调用afterReceiveCompleted()
跟null
;他们现在做到了。
集成流:生成的 Bean 名称
从版本 5.0.5 开始,为IntegrationFlow
包括 Flow Bean 名称,后跟一个点作为前缀。
例如,如果流 Bean 的名称为flowBean
,生成的 Bean 可能被命名为flowBean.generatedBean
.
请参阅使用消息流以获取更多信息。
聚合器更改
如果groupTimeout
的计算结果为负值,则聚合器现在会立即使组过期。
只null
被视为对当前消息不执行任何作的信号。
一个新的popSequence
属性已引入以允许(默认情况下)调用MessageBuilder.popSequenceDetails()
用于输出消息。
还有一个AbstractAggregatingMessageGroupProcessor
现在返回一个AbstractIntegrationMessageBuilder
而不是整体Message
用于优化。
有关详细信息,请参阅聚合器。
@Publisher注释更改
从 5.1 版开始,您必须显式启用@Publisher
AOP 功能,使用@EnablePublisher
或使用<int:enable-publisher>
child 元素<int:annotation-config>
. 此外,proxy-target-class
和order
已添加用于调整ProxyFactory
配置。
看注释驱动的配置,其中包含@Publisher
注解了解更多信息。
文件更改
如果您正在使用FileExistsMode.APPEND
或FileExistsMode.APPEND_NO_FLUSH
你可以提供一个newFileCallback
将在创建新文件时调用。
此回调接收新创建的文件和触发回调的消息。
例如,这可用于编写 CSV 标头。
这FileReadingMessageSource
now 不会检查和创建目录,直到其start()
被称为。
因此,如果FileReadingMessageSource
有autoStartup = false
,则在应用程序启动期间没有针对文件系统的故障。
有关更多信息,请参阅文件支持。
AMQP 更改
我们已经使ID
和Timestamp
标头映射更改DefaultAmqpHeaderMapper
.
有关详细信息,请参阅 AMQP 消息头底部附近的注释。
这contentType
header 现在已正确映射为常规标头映射中的条目。
有关详细信息,请参阅 contentType 标头。
从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载是ManualAckListenerExecutionFailedException
加上channel
和deliveryTag
性能。
这使错误流能够确认/nack原始消息。
有关详细信息,请参阅入站消息转换。
JDBC 更改
令人困惑max-rows-per-poll
JDBC Inbound Channel Adapter 和 JDBC Outbound Gateway 上的属性已被弃用,取而代之的是新引入的max-rows
财产。
这JdbcMessageHandler
现在支持batchUpdate
当请求消息的有效负载是Iterable
类型。
的索引INT_CHANNEL_MESSAGE
表(对于JdbcChannelMessageStore
)已优化。
如果此类存储中有大型消息组,则可能希望更改索引。
有关更多信息,请参阅 JDBC 支持。
FTP 和 SFTP 更改
一个RotatingServerAdvice
现在可用于使用入站通道适配器轮询多个服务器和目录。
有关详细信息,请参阅入站通道适配器:轮询多个服务器和目录和入站通道适配器:轮询多个服务器和目录。
此外,入站适配器localFilenameExpression
实例可以包含#remoteDirectory
变量,其中包含正在轮询的远程目录。
比较器的泛型类型(用于对流适配器的提取文件列表进行排序)已从Comparator<AbstractFileInfo<F>>
自Comparator<F>
.
有关详细信息,请参阅 FTP 流式入站通道适配器和 SFTP 流式入站通道适配器。
此外,现在可以为入站通道适配器的同步器提供Comparator
. 这在使用maxFetchSize
以限制检索到的文件。
这CachingSessionFactory
有一个新属性testSession
当 true 时,会导致工厂执行test()
对Session
从缓存中签出现有会话时。
TCP 支持
使用 SSL 时,默认情况下,现在启用主机验证,以防止使用受信任证书进行中间人攻击。 有关详细信息,请参阅主机验证。
此外,现在可以在DefaultTcpSSLContextSupport
.
Twitter 支持
由于 Spring Social 项目已移至生命周期结束状态,因此 Spring Integration 中的 Twitter 支持已移至 Extensions 项目。有关更多信息,请参阅 Spring Integration Social Twitter 。
JMS 支持
这JmsSendingMessageHandler
现在提供deliveryModeExpression
和timeToLiveExpression
选项来确定 JMS 消息在运行时发送的相应 QoS 选项。 这DefaultJmsHeaderMapper
现在允许映射入站JMSDeliveryMode
和JMSExpiration
属性通过设置为true
各自setMapInboundDeliveryMode()
和setMapInboundExpiration()
选项。 当JmsMessageDrivenEndpoint
或JmsInboundGateway
已停止,则关联的侦听器容器现在已关闭;这将关闭其共享连接和任何使用者。您可以将端点配置为恢复到以前的行为。
有关更多信息,请参阅 JMS 支持。
HTTP/WebFlux 支持
这statusCodeExpression
(和Function
) 现在与RequestEntity<?>
作为评估上下文的根对象,因此请求标头、方法、URI 和正文可用于目标状态代码计算。
有关更多信息,请参阅 HTTP 支持和 WebFlux 支持。
JMX 更改
如果对象名称键值包含 Java 标识符(或句点)中允许的字符以外的任何字符,则现在会引用.
). 例如org.springframework.integration:type=MessageChannel,
name="input:foo.myGroup.errors"
. 这有一个副作用,即以前“允许”的带有此类字符的名称现在将被引用。 例如org.springframework.integration:type=MessageChannel,
name="input#foo.myGroup.errors"
.
千分尺支架变更
现在,自定义框架创建的标准千分尺仪表更加简单。有关更多信息,请参阅千分尺集成。
集成图自定义
现在可以向IntegrationNode
通过Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback
在IntegrationGraphServer
.
有关更多信息,请参阅集成图。
集成全局属性
现在可以在日志中打印集成全局属性(包括默认值),当DEBUG
逻辑级别已打开org.springframework.integration
类别。
有关详细信息,请参阅全局属性。
这receiveTimeout
为@Poller
这@Poller
注释现在提供receiveTimeout
方便的选项。
看使用@Poller
注解了解更多信息。
4.3 和 5.0 之间的更改
新组件
5.0 版添加了许多新组件。
Java DSL
单独的 Spring Integration Java DSL 项目现在已合并到核心 Spring Integration 项目中。
这IntegrationComponentSpec
通道适配器和网关的实现分发到其特定模块。
有关 Java DSL 支持的更多信息,请参阅 Java DSL。
另请参阅 4.3 到 5.0 迁移指南,了解迁移到 Spring Integration 5.0 所需的步骤。
测试支持
我们创建了一个新的 Spring Integration 测试框架来帮助测试 Spring Integration 应用程序。
现在,使用@SpringIntegrationTest
测试类上的注释和MockIntegration
factory,您可以使集成流的 JUnit 测试变得更容易一些。
有关更多信息,请参阅测试支持。
内容类型转换
现在我们使用新的InvocableHandlerMethod
基于服务方法调用的基础设施,我们可以执行contentType
从有效负载转换为目标方法参数。
有关详细信息,请参阅内容类型转换。
ErrorMessagePublisher
和ErrorMessageStrategy
我们添加了ErrorMessagePublisher
和ErrorMessageStrategy
用于创建ErrorMessage
实例。
有关详细信息,请参阅错误处理。
一般更改
Spring Integration 现在完全基于 Spring Framework5.0
和反应堆项目3.1
.
不再支持以前的 Project Reactor 版本。
核心变更
这@Poller
注释现在具有errorChannel
属性,以便更轻松地配置底层MessagePublishingErrorHandler
.
有关更多信息,请参阅注释支持。
所有请求-回复端点(基于AbstractReplyProducingMessageHandler
) 现在可以启动事务,因此使整个下游流成为事务性。
有关更多信息,请参阅事务支持。
这SmartLifecycleRoleController
现在提供获取角色中端点状态的方法。
有关详细信息,请参阅端点角色。
默认情况下,POJO 方法现在使用InvocableHandlerMethod
,但您可以像以前一样将它们配置为使用 SpEL。
有关更多信息,请参阅 POJO 方法调用。
当将 POJO 方法作为消息处理程序时,您现在可以使用@Default
注释,为不匹配的条件提供回退机制。
有关详细信息,请参阅配置服务激活器。
我们添加了一个简单的PassThroughTransactionSynchronizationFactory
始终将轮询的消息存储在当前事务上下文中。
该消息用作failedMessage
属性的MessagingException
,它包装了在事务完成期间抛出的任何原始异常。
有关详细信息,请参阅事务同步。
基于表达式的聚合器ReleaseStrategy
现在根据MessageGroup
而不仅仅是Message<?>
.
有关更多信息,请参阅聚合器和 Spring 表达式语言 (SpEL)。
您现在可以提供ObjectToMapTransformer
与定制的JsonObjectMapper
.
有关更多信息,请参阅聚合器和 Spring 表达式语言 (SpEL)。
这@GlobalChannelInterceptor
annotation 和<int:channel-interceptor>
现在支持负模式(通过!
prepending)以匹配组件名称。
有关更多信息,请参阅全局通道拦截器配置。
当候选者未能获取锁时,LockRegistryLeaderInitiator
现在会发出新的OnFailedToAcquireMutexEvent
通过DefaultLeaderEventPublisher
.
看Leadership Event Handling
了解更多信息。
网关更改
当网关方法具有void
返回类型并提供错误通道,网关现在可以正确地将errorChannel
页眉。
以前,未填充标头。
这导致同步下游流(在调用线程上运行)将异常发送到配置的通道,但异步下游流上的异常将发送到默认的errorChannel
相反。
这RequestReplyExchanger
界面现在有一个throws MessagingException
子句来满足拟议的消息交换合同。
现在,您可以使用 SpEL 表达式指定请求和回复超时。 有关详细信息,请参阅消息传递网关。
聚合器性能更改
默认情况下,聚合器现在使用SimpleSequenceSizeReleaseStrategy
,效率更高,尤其是对于大型团体。
现在,空组计划在以下之后删除empty-group-min-timeout
.
有关详细信息,请参阅聚合器。
分路器更改
拆分器组件现在可以处理和拆分 JavaStream
和反应流Publisher
对象。
如果输出通道是ReactiveStreamsSubscribableChannel
这AbstractMessageSplitter
构建一个Flux
用于后续迭代,而不是常规Iterator
,与被拆分的对象无关。
另外AbstractMessageSplitter
提供protected obtainSizeIfPossible()
允许确定大小的方法Iterable
和Iterator
对象,如果可能的话。
有关更多信息,请参阅拆分器。
JMS 更改
以前,Spring Integration JMS XML 配置使用默认的 bean 名称connectionFactory
对于 JMS 连接工厂,允许从组件定义中省略该属性。
我们将其重命名为jmsConnectionFactory
,这是 Spring Boot 用来自动配置 JMS 连接工厂 bean 的 bean 名称。
如果您的应用程序依赖于以前的行为,您可以将connectionFactory
bean 到jmsConnectionFactory
或者专门配置组件以使用其当前名称来使用 Bean。
有关更多信息,请参阅 JMS 支持。
邮件更改
呈现 IMAP 邮件内容的一些不一致问题已得到解决。 有关更多信息,请参阅“邮件接收通道适配器”部分中的注释。
提要更改
而不是com.rometools.fetcher.FeedFetcher
,这在 ROME 中已被弃用,我们引入了一个新的Resource
属性的FeedEntryMessageSource
.
有关详细信息,请参阅 Feed Adapter。
文件更改
我们推出了新的FileHeaders.RELATIVE_PATH
消息头表示FileReadingMessageSource
.
尾部适配器现在支持idleEventInterval
在该时间段内文件中没有数据时发出事件。
flush 谓词FileWritingMessageHandler
现在有一个额外的参数。
文件出站通道适配器和网关 (FileWritingMessageHandler
) 现在支持REPLACE_IF_MODIFIED
FileExistsMode
.
它们现在还支持对新写入的文件设置文件权限。
一个新的FileSystemMarkerFilePresentFileListFilter
现已推出。
有关详细信息,请参阅处理不完整的数据。
这FileSplitter
现在提供一个firstLineAsHeader
选项,将第一行内容作为其余行发出的邮件的标头。
有关更多信息,请参阅文件支持。
FTP 和 SFTP 更改
入站通道适配器现在具有名为max-fetch-size
,用于限制在本地目录中当前没有文件时轮询期间获取的文件数。
默认情况下,它们还配置了FileSystemPersistentAcceptOnceFileListFilter
在local-filter
.
您还可以提供自定义DirectoryScanner
通过设置新引入的scanner
属性。
您现在可以将正则表达式和模式过滤器配置为始终传递目录。 在出站网关中使用递归时,这可能很有用。
默认情况下,所有入站通道适配器(基于流式处理和同步)现在都使用适当的AbstractPersistentAcceptOnceFileListFilter
防止重复下载远程文件的实现。
FTP 和 SFTP 出站网关现在支持REPLACE_IF_MODIFIED
FileExistsMode
获取远程文件时。
FTP 和 SFTP 流式入站通道适配器现在在邮件头中添加远程文件信息。
FTP 和 SFTP 出站通道适配器(以及PUT
命令)现在支持InputStream
如payload
太。
入站通道适配器现在可以使用新引入的RecursiveDirectoryScanner
.
请参阅scanner
FTP Inbound Channel Adapter 部分中的选项。
此外,您现在可以将这些适配器切换到WatchService
相反。
我们添加了NLST
命令设置为AbstractRemoteFileOutboundGateway
执行 list files names 远程命令。
您现在可以提供FtpOutboundGateway
跟workingDirExpression
以更改当前请求消息的 FTP 客户端工作目录。
这RemoteFileTemplate
现在随invoke(OperationsCallback<F, T> action)
执行多个RemoteFileOperations
调用相同的、线程绑定的、Session
.
我们添加了新的过滤器来检测不完整的远程文件。
这FtpOutboundGateway
和SftpOutboundGateway
现在支持在成功传输后使用GET
或MGET
命令。
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
集成属性
版本 4.3.2 添加了一个新的spring.integration.readOnly.headers
global 属性,用于自定义不应复制到新创建的标头列表Message
通过MessageBuilder
.
有关详细信息,请参阅全局属性。
流更改
我们在CharacterStreamReadingMessageSource
让它用于“管道”标准并在管道关闭时发布应用程序事件。
有关详细信息,请参阅从流读取。
屏障变化
这BarrierMessageHandler
现在支持将延迟到达的触发器消息发送到的丢弃通道。
有关更多信息,请参阅线程屏障。
AMQP 更改
AMQP 出站端点现在支持在使用 RabbitMQ 延迟消息交换插件时设置延迟表达式。
入站端点现在支持 Spring AMQPDirectMessageListenerContainer
.
可轮询的 AMQP 支持通道现在会阻止轮询程序配置的轮询程序线程receiveTimeout
(默认值:一秒)。
标头,例如contentType
,现在在最终消息中使用由消息转换器添加到消息属性的消息。
以前,它取决于转换器类型,以确定最终消息中出现的标头和消息属性。
要覆盖转换器设置的标头,请将headersMappedLast
属性设置为true
.
有关详细信息,请参阅 AMQP 支持。
HTTP 更改
默认情况下,DefaultHttpHeaderMapper.userDefinedHeaderPrefix
属性现在是一个空字符串,而不是X-
.
有关更多信息,请参阅 HTTP 标头映射。
默认情况下,uriVariablesExpression
现在使用SimpleEvaluationContext
(自 5.0.4 起)。
有关详细信息,请参阅映射 URI 变量。
MQTT 变更
入站消息现在与RECEIVED_TOPIC
,RECEIVED_QOS
和RECEIVED_RETAINED
标头,以避免在应用程序中继消息时无意中传播到出站消息。
出站通道适配器现在支持主题、qos 和保留属性的表达式。 默认值保持不变。 有关更多信息,请参阅 MQTT 支持。
STOMP 更改
我们将 STOMP 模块更改为ReactorNettyTcpStompClient
,基于 Project Reactor3.1
和reactor-netty
外延。
我们重命名Reactor2TcpStompSessionManager
自ReactorNettyTcpStompSessionManager
,根据ReactorNettyTcpStompClient
基础。
有关更多信息,请参阅 STOMP 支持。
Web 服务更改
您现在可以提供WebServiceOutboundGateway
具有外部配置的实例WebServiceTemplate
实例。
DefaultSoapHeaderMapper
现在可以映射一个javax.xml.transform.Source
user-defined header 添加到 SOAP 标头元素。
Simple WebService 入站和出站网关现在可以处理完整的WebServiceMessage
作为payload
,允许作 MTOM 附件。
有关更多信息,请参阅 Web 服务支持。
Redis 更改
这RedisStoreWritingMessageHandler
现在提供额外的String
基于 SpEL 表达式的 setter(为了方便 Java 配置)。
您现在可以配置zsetIncrementExpression
在RedisStoreWritingMessageHandler
也。
此外,此属性已从true
自false
由于INCR
选项ZADD
Redis 命令是可选的。
您现在可以提供RedisInboundChannelAdapter
使用Executor
用于执行 Redis 侦听器调用器。
此外,收到的消息现在包含一个RedisHeaders.MESSAGE_SOURCE
标头来指示消息的来源(主题或模式)。
有关更多信息,请参阅 Redis 支持。
TCP 更改
我们添加了一个新的ThreadAffinityClientConnectionFactory
将 TCP 连接绑定到线程。
您现在可以配置 TCP 连接工厂以支持PushbackInputStream
实例,让反序列化器在“预读”后“未读”(回推)字节。
我们添加了一个ByteArrayElasticRawDeserializer
没有maxMessageSize
根据需要控制和缓冲传入数据。
有关详细信息,请参阅 TCP 和 UDP 支持。
JDBC 更改
这JdbcMessageChannelStore
现在为ChannelMessageStorePreparedStatementSetter
,允许您在商店中自定义消息插入。
这ExpressionEvaluatingSqlParameterSourceFactory
现在为sqlParameterTypes
,允许您自定义参数的 SQL 类型。
有关更多信息,请参阅 JDBC 支持。
指标更改
对千分尺进行了更改Meters 在 5.0.3 版本中,使它们更适合在维度系统中使用。
在 5.0.4 中进行了进一步的更改。
如果您使用 Micrometer,我们建议至少使用 5.0.4 版。 |
@EndpointId
附注
此注解在 5.0.4 版中引入,在使用 Java 配置时提供对 Bean 命名的控制。 有关更多信息,请参阅端点 Bean 名称。
4.2 和 4.3 之间的更改
新组件
4.3 版本添加了许多新组件。
AMQP 异步出站网关
请参阅异步出站网关。
MessageGroupFactory
我们引入了MessageGroupFactory
允许控制MessageGroup
实例中的实例MessageGroupStore
逻辑。
我们添加了SimpleMessageGroupFactory
实现SimpleMessageGroup
,替换为GroupType.HASH_SET
作为默认值
工厂为标准MessageGroupStore
实现。
有关详细信息,请参阅消息存储。
PersistentMessageGroup
我们添加了PersistentMessageGroup
(延迟加载代理)实现MessageGroupStore
实例
返回此实例的getMessageGroup()
当他们的lazyLoadMessageGroups
是true
(默认值)。
有关详细信息,请参阅消息存储。
FTP 和 SFTP 流式入站通道适配器
我们添加了返回InputStream
对于每个文件,允许您检索远程文件而无需将它们写入本地文件系统。
有关详细信息,请参阅 FTP 流式入站通道适配器和 SFTP 流式入站通道适配器。
StreamTransformer
我们添加了StreamTransformer
将InputStream
有效负载到byte[]
或String
.
有关详细信息,请参阅流转换器。
积分图
我们添加了IntegrationGraphServer
,以及IntegrationGraphController
REST 服务,将 Spring Integration 应用程序的运行时模型公开为图形。
有关更多信息,请参阅集成图。
JDBC 锁注册表
我们添加了JdbcLockRegistry
用于通过数据库表共享的分布式锁。
有关更多信息,请参阅 JDBC 锁定注册表。
LeaderInitiator
为LockRegistry
我们添加了LeaderInitiator
基于LockRegistry
策略。 有关更多信息,请参阅领导事件处理。
一般更改
本节介绍 4.3 版为 Spring Integration 带来的一般更改。
核心变更
本节描述对 Spring Integration 核心的一般更改。
链中的出站网关
以前,您可以指定reply-channel
在链中的出站网关上。
它完全被忽视了。
网关的回复转到下一个链元素,或者,如果网关是最后一个元素,则转到链的输出通道。
现在检测到并禁止这种情况。
如果您有这样的配置,请删除reply-channel
.
异步服务激活器
我们添加了一个选项,使服务激活器是同步的。有关详细信息,请参阅异步服务激活器。
邮件更改
本节介绍对 Spring Integration Mail 功能的一般更改。
可自定义的用户标志
可定制的userFlag
(在 4.2.2 中添加,以提供用于表示邮件已被seen 的标志的自定义)现在在 XML 命名空间中可用。 看在以下情况下标记 IMAP 消息\Recent
不支持了解更多信息。
邮件消息映射
您现在可以使用MessageHeaders
包含邮件标头和包含电子邮件内容的有效负载。以前,有效负载始终是原始的MimeMessage
. 有关详细信息,请参阅入站邮件消息映射。
JMS 更改
本节介绍对 Spring Integration JMS 功能的一般更改。
标头映射器
这DefaultJmsHeaderMapper
现在映射标准correlationId
header 作为消息属性,方法是调用其toString()
方法。 有关详细信息,请参阅将消息头映射到 JMS 消息或映射 JMS 消息。
异步网关
JMS 出站网关现在具有async
财产。
有关详细信息,请参阅异步网关。
聚合器更改
当 POJO 聚合器发布Message<?>
对象。
这种情况很少见,但是,如果您的应用程序这样做,则需要对 POJO 进行小的更改。
看到这个重要提示:该SimpleMessageGroup.getMessages()
方法返回一个unmodifiableCollection
.注意了解更多信息。
TCP/UDP 更改
本节介绍对 Spring Integration TCP/UDP 功能的一般更改。
事件
一个新的TcpConnectionServerListeningEvent
在启动服务器连接工厂时发出。
有关详细信息,请参阅 TCP 连接事件。
您现在可以使用destination-expression
和socket-expression
属性<int-ip:udp-outbound-channel-adapter>
.
有关更多信息,请参阅 UDP 适配器。
流解串器
在组装整个消息之前无法分配最终缓冲区的各种反序列化程序现在支持汇集接收数据的原始缓冲区,而不是为每条消息创建和丢弃缓冲区。 有关更多信息,请参阅 TCP 连接工厂。
TCP 消息映射器
消息映射器现在可以选择设置配置的内容类型标头。 有关详细信息,请参阅 IP 消息头。
文件更改
本节介绍对 Spring Integration File 功能的一般更改。
目标目录创建
生成的文件名FileWritingMessageHandler
可以表示一个子路径,用于在目标目录中保存文件所需的目录结构。
有关详细信息,请参阅生成文件名。
这FileReadingMessageSource
现在隐藏WatchService
内部类中的目录扫描逻辑。
我们添加了use-watch-service
和watch-events
选项来启用此行为。
我们弃用了顶级WatchServiceDirectoryScanner
因为 API 不一致。
看WatchServiceDirectoryScanner
了解更多信息。
追加和刷新
现在,您可以避免在追加时刷新文件,并使用多种策略在空闲期间刷新数据。
看使用时刷新文件APPEND_NO_FLUSH
了解更多信息。
保留时间戳
您现在可以配置出站通道适配器以设置目标文件的lastmodified
时间戳。
有关更多信息,请参阅文件时间戳。
分路器更改
这FileSplitter
现在在文件完全读取时自动关闭 FTP 或 SFTP 会话。
当出站网关返回InputStream
或者当您使用新的 FTP 或 SFTP 流式处理通道适配器时。
我们还引入了新的markers-json
转换选项FileSplitter.FileMarker
到 JSONString
用于轻松的下游网络交互。
有关更多信息,请参阅文件拆分器。
文件过滤器
我们添加了ChainFileListFilter
作为替代方案CompositeFileListFilter
.
有关详细信息,请参阅读取文件。
AMQP 更改
本节介绍对 Spring Integration AMQP 功能的一般更改。
内容类型消息转换器
出站终结点现在支持RabbitTemplate
配置了ContentTypeDelegatingMessageConverter
这样
您可以根据消息内容类型选择转换器。
有关详细信息,请参阅出站消息转换。
延迟消息处理的标头
Spring AMQP 1.6 增加了对延迟消息交换的支持。
标头映射现在支持标头 (amqp_delay
和amqp_receivedDelay
) 。
AMQP 支持的通道
AMQP 支持的通道现在支持消息映射。 有关详细信息,请参阅 AMQP 支持的消息通道。
Redis 更改
本节介绍对 Spring Integration Redis 功能的一般更改。
列表推送/弹出方向
以前,队列通道适配器总是在固定方向上使用 Redis 列表,推送到左端,从右端读取。
您现在可以使用rightPop
和leftPush
选项RedisQueueMessageDrivenEndpoint
和RedisQueueOutboundChannelAdapter
分别。
有关更多信息,请参阅 Redis 队列入站通道适配器和 Redis 队列出站通道适配器。
队列入站网关默认序列化程序
入站网关中的默认序列化程序已更改为JdkSerializationRedisSerializer
以与出站网关兼容。
有关更多信息,请参阅 Redis 队列入站网关。
HTTP 更改
以前,对于具有正文(例如POST
) 没有content-type
header,则忽略正文。
在此版本中,此类请求的内容类型被视为application/octet-stream
按建议
通过 RFC 2616。
有关更多信息,请参阅 Http 入站组件。
uriVariablesExpression
现在使用SimpleEvaluationContext
默认情况下(自 4.3.15 起)。
有关详细信息,请参阅映射 URI 变量。
SFTP 更改
本节介绍对 Spring Integration SFTP 功能的一般更改。
chmod
变化
SFTP 出站网关(对于put
和mput
命令),SFTP 出站通道适配器现在支持chmod
属性,在上传后更改远程文件权限。
看SFTP Outbound Channel Adapter
和SFTP Outbound Gateway
了解更多信息。
FTP 更改
本节介绍对 Spring Integration FTP 功能的一般更改。
会话更改
这FtpSession
现在支持null
对于list()
和listNames()
方法,因为底层 FTP 客户端可以使用它。
这样,您现在可以配置FtpOutboundGateway
如果没有remoteDirectory
表达。
您还可以配置<int-ftp:inbound-channel-adapter>
没有remote-directory
或remote-directory-expression
.
有关更多信息,请参阅 FTP/FTPS 适配器。
路由器更改
这ErrorMessageExceptionTypeRouter
现在支持Exception
超类映射以避免在多个继承器的情况下对同一通道重复。
为此,该ErrorMessageExceptionTypeRouter
在初始化期间加载映射类以快速失败ClassNotFoundException
.
有关更多信息,请参阅路由器。
标头映射
本节介绍 4.2 版和 4.3 版之间对标头映射的更改。
AMQP 标头映射
以前,默认情况下仅映射标准 AMQP 标头。
您必须显式启用用户定义标头的映射。
在此版本中,默认情况下映射所有标头。
此外,入站amqp_deliveryMode
默认情况下不再映射标头。
有关详细信息,请参阅 AMQP 消息标头。
Groovy 脚本
您现在可以使用compile-static
提示或任何其他CompilerConfiguration
选项。
有关更多信息,请参阅 Groovy 配置。
@InboundChannelAdapter
变化
这@InboundChannelAdapter
现在有一个别名channel
常规属性value
.
此外,目标SourcePollingChannelAdapter
组件现在可以解析目标outputChannel
bean 来自其提供的名称 (outputChannelName
选项)以后期绑定方式。
有关更多信息,请参阅注释支持。
XMPP 更改
XMPP 通道适配器现在支持 XMPP 扩展 (XEP)。 有关详细信息,请参阅 XMPP 扩展。
窃听后期绑定
这WireTap
ChannelInterceptor
现在可以接受一个channelName
解析为目标MessageChannel
后来,在第一次主动拦截器行动中。
有关更多信息,请参阅窃听。
ChannelMessageStoreQueryProvider
变化
这ChannelMessageStoreQueryProvider
现在支持 H2 数据库。
有关详细信息,请参阅支持消息通道。
WebSocket 更改
这ServerWebSocketContainer
现在公开一个allowedOrigins
选项,以及SockJsServiceOptions
公开一个suppressCors
选择。
有关更多信息,请参阅 WebSockets 支持。
4.1 和 4.2 之间的更改
新组件
4.2 版添加了许多新组件。
主要管理/JMX 返工
我们添加了一个新的MetricsFactory
策略接口。
此更改以及 JMX 和管理基础架构中的其他更改提供了对管理配置和运行时性能的更多控制。
但是,这对(某些)用户环境有一些重要影响。
MongoDB 元数据存储
这MongoDbMetadataStore
现已推出。
有关更多信息,请参阅 MongoDB 元数据存储。
SecuredChannel 注释
我们引入了@SecuredChannel
注释,替换已弃用的ChannelSecurityInterceptorFactoryBean
.
有关更多信息,请参阅 Spring Integration 中的安全性。
SecurityContext
增殖
我们引入了SecurityContextPropagationChannelInterceptor
对于SecurityContext
从一个消息流的线程传播到另一个消息流的线程。
有关更多信息,请参阅 Spring Integration 中的安全性。
文件拆分器
在 4.1.2 中,我们添加了FileSplitter
,它将文本文件拆分为几行。
它现在在int-file:
Namespace。
有关更多信息,请参阅文件拆分器。
Zookeeper 支持
我们在框架中添加了 Zookeeper 支持,以便在集群或多主机环境中运行时提供帮助。 此更改会影响以下功能:
-
ZookeeperMetadataStore
-
ZookeeperLockRegistry
-
Zookeeper 领导层
有关更多信息,请参阅 Zookeeper 支持。
线程屏障
新线程<int:barrier/>
组件可用,让线程挂起,直到发生某些异步事件。
有关更多信息,请参阅线程屏障。
STOMP 支持
我们将 STOMP 支持作为入站和出站通道适配器对添加到框架中。 有关更多信息,请参阅 STOMP 支持。
Codec
一个新的Codec
引入了抽象,用于对对象进行编码和解码byte[]
.
我们添加了一个使用 Kryo 的实现。
我们还添加了基于编解码器的转换器和消息转换器。
有关详细信息,请参阅编解码器。
消息 PreparedStatement Setter
一个新的MessagePreparedStatementSetter
函数式接口回调可用于JdbcMessageHandler
(<int-jdbc:outbound-gateway>
和<int-jdbc:outbound-channel-adapter>
) 作为使用SqlParameterSourceFactory
以填充PreparedStatement
使用requestMessage
上下文。
有关详细信息,请参阅出站通道适配器。
一般更改
本节介绍从 4.1 版到 4.2 版的一般更改。
文件更改
有关这些更改的更多信息,请参阅文件支持。
班级套餐更改
我们移动了ScatterGatherHandler
类从org.springframework.integration.handler
到org.springframework.integration.scattergather
.
TCP 更改
本节介绍对 Spring Integration TCP 功能的一般更改。
TCP 序列化程序
The TCPSerializers
不再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 SSLSession 可用于标头映射
TcpConnection
实现现在支持getSslSession()
允许您从会话中提取信息以添加到邮件标头。
有关详细信息,请参阅 IP 消息头。
TCP 事件
现在,每当发生关联异常时,都会发布新事件,例如将消息发送到不存在的套接字。
这TcpConnectionEventListeningMessageProducer
已弃用。
请改用通用事件适配器。
有关详细信息,请参阅 TCP 连接事件。
@InboundChannelAdapter
变化
以前,@Poller
在入站通道适配器上,默认为maxMessagesPerPoll
属性设置为-1
(无穷大)。
这与 XML 配置不一致<inbound-channel-adapter/>
,默认为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 支持的通道的默认值。
共享订阅
我们向消息驱动的端点添加了对共享订阅 (JMS 2.0) 的命名空间支持,并且<int-jms:publish-subscribe-channel>
. 以前,您必须将侦听器容器连接到<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
属性,以允许对回复的外部 Bean 进行更多控制RabbitTemplate
.
您也可以提供自己的AmqpTemplate
实现。
此外,您可以使用default-reply-to
如果请求消息没有replyTo
财产。
有关详细信息,请参阅 AMQP 支持。
XPath Splitter 改进
这XPathMessageSplitter
(<int-xml:xpath-splitter>
) 现在允许配置output-properties
用于内部javax.xml.transform.Transformer
并支持Iterator
mode(默认为true
) 用于 XPath 评估org.w3c.dom.NodeList
结果。
有关详细信息,请参阅拆分 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 功能的一般更改。
网关方法可以返回CompletableFuture<?>
使用 Java 8 时,网关方法现在可以返回CompletableFuture<?>
.
看CompletableFuture
了解更多信息。
MessagingGateway 注释
请求和回复超时属性现在是String
而不是Long
以允许使用属性占位符或 SpEL 进行配置。
看@MessagingGateway
注解.
聚合器更改
本节介绍对 Spring Integration 聚合器功能的一般更改。
聚合器性能
此版本包括一些聚合组件(聚合器、重排序器等)的性能改进,通过在发布消息时更有效地从组中删除消息。
新方法 (removeMessagesFromGroup
) 已添加到消息存储中。
将removeBatchSize
属性(默认:100
) 以调整每个作中删除的消息数。
目前,JDBC、Redis 和 MongoDB 消息存储支持此属性。
输出消息组处理器
使用ref
或 inner bean 中,您现在可以直接绑定MessageGroupProcessor
.
此外,我们还添加了一个SimpleMessageGroupProcessor
返回组中的消息集合。
当输出处理器生成Message<?>
,聚合器会单独释放这些消息。
配置SimpleMessageGroupProcessor
使聚合器成为消息屏障,其中消息被保留,直到它们全部到达,然后单独释放。
有关详细信息,请参阅聚合器。
FTP 和 SFTP 更改
本节介绍对 Spring Integration FTP 和 SFTP 功能的一般更改。
入站通道适配器
您现在可以指定一个remote-directory-expression
在入站通道适配器上,以确定运行时的目录。
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
默认 Sftp 会话工厂
以前,DefaultSftpSessionFactory
无条件允许与未知主机的连接。
现在可以配置(默认:false
).
工厂现在需要配置的knownHosts
,除非allowUnknownKeys
属性是true
(默认值:false
).
Websocket 更改
我们添加了WebSocketHandlerDecoratorFactory
支持ServerWebSocketContainer
允许对内部WebSocketHandler
.
有关详细信息,请参阅 WebSockets 命名空间支持。
应用程序事件适配器更改
这ApplicationEvent
适配器现在可以与payload
作为event
直接允许省略自定义ApplicationEvent
扩展。
为此,我们引入了publish-payload
boolean 属性已引入<int-event:outbound-channel-adapter>
.
看SpringApplicationEvent
支持了解更多信息。
4.0 和 4.1 之间的更改
新组件
4.1 版添加了许多新组件。
Promise<?>网关
消息传递网关方法现在支持 ReactorPromise
返回类型。
请参阅异步网关。
WebSocket 支持
这WebSocket
模块现已推出。
它完全基于 Spring WebSocket 和 Spring Messaging 模块,并提供了一个<inbound-channel-adapter>
和<outbound-channel-adapter>
.
有关更多信息,请参阅 WebSockets 支持。
分散-聚集企业集成模式
我们实现了分散-收集企业集成模式。有关更多信息,请参阅分散-收集。
布线滑移模式
我们添加了路由单 EIP 模式实现。有关详细信息,请参阅路由单。
幂等接收器模式
我们通过添加<idempotent-receiver>
组件或IdempotentReceiverInterceptor
和IdempotentReceiver
Java 配置的注释。有关更多信息,请参阅幂等接收方企业集成模式和 Javadoc。
福音JsonObjectMapper
我们添加了 BoonJsonObjectMapper
对于 JSON 转换器。有关更多信息,请参阅转换器。
Redis 队列网关
我们添加了<redis-queue-inbound-gateway>
和<redis-queue-outbound-gateway>
组件。 请参阅 Redis 队列入站网关和 Redis 队列出站网关。
PollSkipAdvice
我们添加了PollSkipAdvice
,您可以在<advice-chain>
的<poller>
确定当前轮询是否应被您实现的某些条件禁止(跳过)PollSkipStrategy
. 有关更多信息,请参阅轮询器。
一般更改
本节介绍从 4.0 版到 4.1 版的一般更改。
AMQP 入站终结点、通道
使用消息侦听器容器(入站端点和通道)的元素现在支持missing-queues-fatal
属性。 有关详细信息,请参阅 AMQP 支持。
AMQP 出站终结点
AMQP 出站终结点支持名为lazy-connect
(默认值:true
). 什么时候true
,在第一条消息到达之前,不会建立与代理的连接(假设没有入站端点,这些端点始终在启动期间尝试建立连接)。当设置为false
,则在应用程序启动期间尝试建立连接。有关更多信息,请参阅 AMQP 支持。
简单消息商店
这SimpleMessageStore
调用时不再复制群组getMessageGroup()
.
有关详细信息,请参阅 [警告]。
Http 入站通道适配器和状态代码
这<http:inbound-channel-adapter>
现在可以使用status-code-expression
以覆盖默认值200 OK
地位。
有关更多信息,请参阅 HTTP 命名空间支持。
MQTT 适配器更改
现在,您可以将 MQTT 通道适配器配置为连接到多个服务器,例如,支持高可用性 (HA)。 有关更多信息,请参阅 MQTT 支持。
MQTT 消息驱动通道适配器现在支持为每个订阅指定 QoS 设置。 请参阅入站(消息驱动)通道适配器以获取更多信息。
MQTT 出站通道适配器现在支持异步发送,避免在确认交付之前阻塞。 有关详细信息,请参阅出站通道适配器。
现在可以在运行时以编程方式订阅和取消订阅主题。 请参阅入站(消息驱动)通道适配器以获取更多信息。
FTP 和 SFTP 适配器更改
FTP 和 SFTP 出站通道适配器现在支持追加到远程文件,并在远程文件已存在时执行特定作。
远程文件模板现在也支持此功能,以及rmdir()
和exists()
.
此外,远程文件模板提供对底层客户端对象的访问,从而支持对低级 API 的访问。
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
拆分器和迭代器
Splitter
组件现在支持Iterator
作为生成输出消息的结果对象。
有关更多信息,请参阅拆分器。
聚合
Aggregator
实例现在支持新属性expire-groups-upon-timeout
.
有关详细信息,请参阅聚合器。
内容丰富器改进
我们添加了一个null-result-expression
属性,如果<enricher>
返回null
.
您可以将其添加到<header>
和<property>
.
有关更多信息,请参阅内容丰富器。
我们添加了一个error-channel
属性,该属性用于处理错误流,如果Exception
发生在request-channel
.
这允许您返回用于扩充的替代对象。
有关更多信息,请参阅内容丰富器。
标头通道注册表
这<header-enricher/>
元素的<header-channels-to-string/>
子元素现在可以覆盖标头通道注册表的默认时间,以保留通道映射。
有关详细信息,请参阅标头通道注册表。
有序关机
我们对有序关机算法进行了改进。 有关更多信息,请参阅有序关闭。
管理RecipientListRouter
这RecipientListRouter
现在提供多种管理作,用于在运行时配置收件人。
这样,您现在可以配置<recipient-list-router>
没有任何<recipient>
从一开始。
看RecipientListRouterManagement
了解更多信息。
AbstractHeaderMapper:NON_STANDARD_HEADERSTokens
这AbstractHeaderMapper
实现现在提供了额外的NON_STANDARD_HEADERS
token 来映射任何用户定义的标头,默认情况下不会映射这些标头。
有关详细信息,请参阅 AMQP 消息标头。
AMQP 通道:template-channel-transacted
我们引入了template-channel-transacted
AMQP 的属性MessageChannel
实例。
有关详细信息,请参阅 AMQP 支持的消息通道。
系统日志适配器
默认的 syslog 消息转换器现在可以选择在有效负载中保留原始消息,同时仍设置标头。 有关详细信息,请参阅 Syslog 入站通道适配器。
聚合商建议链
Aggregator
和Resequencer
现在支持<expire-advice-chain/>
和<expire-transactional/>
child 元素来建议forceComplete
操作。
有关详细信息,请参阅使用 XML 配置聚合器。
重排序器更改
当重排序器中的消息组超时(使用group-timeout
或MessageGroupStoreReaper
),默认情况下,延迟到达的邮件现在会立即丢弃。
请参阅重序列器。
可选的 POJO 方法参数
Spring Integration 现在始终如一地处理 Java 8 的Optional
类型。
请参阅配置服务激活器。
QueueChannel
支持的队列类型
这QueueChannel
支持Queue type
已从BlockingQueue
到更通用的Queue
.
此更改允许使用任何外部Queue
实现(例如,Reactor 的PersistentQueue
).
看QueueChannel
配置.
ChannelInterceptor
变化
这ChannelInterceptor
现在支持其他afterSendCompletion()
和afterReceiveCompletion()
方法。
请参阅通道拦截器。
IMAP 窥视
从 4.1.1 版本开始,如果显式将mail.[protocol].peek
JavaMail 属性设置为false
(其中[protocol]
是imap
或imaps
).
请参阅 [重要]。
3.0 和 4.0 之间的更改
新组件
4.0 版添加了许多新组件。
MQTT 通道适配器
MQTT 通道适配器(以前在 Spring Integration Extensions 存储库中可用)现在作为正常 Spring Integration 发行版的一部分提供。 请参阅 MQTT 支持。
@EnableIntegration
我们添加了@EnableIntegration
注释以允许在使用@Configuration
类。
有关更多信息,请参阅注释支持。
@IntegrationComponentScan
我们添加了@IntegrationComponentScan
注释,以允许对特定于 Spring Integration 的组件进行类路径扫描。
有关更多信息,请参阅注释支持。
“@EnableMessageHistory”
您现在可以使用@EnableMessageHistory
注释@Configuration
类。
此外,JMX MBean 可以修改消息历史记录设置。
也MessageHistory
可以跟踪自动创建的MessageHandler
带注释的端点的实例(例如@ServiceActivator
,@Splitter
等)。
有关详细信息,请参阅消息历史记录。
@MessagingGateway
您现在可以使用@MessagingGateway
注解。
它是<int:gateway/>
XML 元素。
有关更多信息,请参阅@MessagingGateway
注解.
弹簧靴@EnableAutoConfiguration
以及@EnableIntegration
注释之前提到的,我们引入了一个钩子,允许使用 Spring Boot 的@EnableAutoConfiguration
注解。
有关更多信息,请参阅 Spring Boot 参考指南中的“自动配置”。
@GlobalChannelInterceptor
以及@EnableIntegration
上面提到的注释,我们引入了@GlobalChannelInterceptor
注解。
有关详细信息,请参阅注释支持。
@IntegrationConverter
我们引入了@IntegrationConverter
注释作为<int:converter/>
元件。
有关详细信息,请参阅注释支持。
@EnablePublisher
我们添加了@EnablePublisher
注释以允许指定default-publisher-channel
为@Publisher
附注。
有关更多信息,请参阅注释支持。
Redis 通道消息存储
我们添加了一个 RedisMessageGroupStore
针对支持QueueChannel
以实现持久性。有关更多信息,请参阅 Redis 通道消息存储。
我们添加了一个 RedisChannelPriorityMessageStore
.
您可以使用它按优先级检索消息。
有关更多信息,请参阅 Redis 通道消息存储。
MongodDB 通道消息存储
MongoDB 支持现在提供MongoDbChannelMessageStore
,这是特定于通道的MessageStore
实现。
跟priorityEnabled = true
,您可以在<int:priority-queue>
元素来实现持久化消息的优先级顺序轮询。
有关更多信息,请参阅 MongoDB 通道消息存储。
@EnableIntegrationMBeanExport
您现在可以启用IntegrationMBeanExporter
使用@EnableIntegrationMBeanExport
注释@Configuration
类。
有关更多信息,请参阅 MBean 导出器。
ChannelSecurityInterceptorFactoryBean
ChannelSecurityInterceptorFactoryBean
现在支持为使用@Configuration
类。
有关更多信息,请参阅 Spring Integration 中的安全性。
Redis 命令网关
Redis 支持现在提供<outbound-gateway>
组件,使用RedisConnection#execute
方法。
更多信息,请参见Redis出站命令网关。
RedisLockRegistry
这RedisLockRegistry
现在可用于支持对多个应用程序实例和服务器可见的全局锁。
这些可以与跨多个应用程序实例聚合消息处理程序一起使用,以便组释放仅发生在一个实例上。
有关详细信息,请参阅 Redis 锁注册表和聚合器。
@Poller
基于注释的消息传递配置现在可以有一个poller
属性。
这意味着用@ServiceActivator
,@Aggregator
,类似的注释现在可以使用inputChannel
这是对PollableChannel
.
有关详细信息,请参阅注释支持。
@InboundChannelAdapter
和SmartLifecycle
用于带注释的端点
我们添加了@InboundChannelAdapter
方法注释。
它是<int:inbound-channel-adapter>
XML 组件。
此外,所有消息传递注释现在都提供SmartLifecycle
选项。
有关详细信息,请参阅注释支持。
Twitter 搜索出站网关
我们添加了一个新的 twitter 端点:<int-twitter-search-outbound-gateway/>
.
与每次使用相同的搜索查询轮询的搜索入站适配器不同,出站网关允许按需自定义查询。
有关更多信息,请参阅 Spring Integration Social Twitter。
@BridgeFrom
和@BridgeTo
附注
我们推出了@BridgeFrom
和@BridgeTo
@Bean
要标记的方法注释MessageChannel
豆子在@Configuration
类。
有关详细信息,请参阅注释支持。
元消息注释
消息传递注释 (@ServiceActivator
,@Router
,@MessagingGateway
等)现在可以配置为用户定义消息传递注释的元注释。
此外,用户定义的注释可以具有相同的属性 (inputChannel
,@Poller
,autoStartup
等)。
有关详细信息,请参阅注释支持。
一般更改
本节介绍从 3.0 版到 4.0 版的一般更改。
需要 Spring Framework 4.0
我们移动了核心消息抽象(Message
,MessageChannel
等)添加到 Spring Frameworkspring-messaging
模块。
直接在其代码中引用这些类的开发人员需要进行更改,如 3.0 到 4.0 迁移指南的第一部分中所述。
XPath 标头扩充器的标头类型
我们引入了header-type
属性的header
child 元素的<int-xml:xpath-header-enricher>
.
此属性提供标头值的目标类型(XPath 表达式计算结果将转换为标头值)。
有关详细信息,请参阅 XPath 标头扩充器。
对象到 JSON 转换器:节点结果
我们引入了result-type
属性的<int:object-to-json-transformer>
.
此属性为将对象映射到 JSON 的结果提供目标类型。
它支持STRING
(默认值)和NODE
.
有关更多信息,请参阅从 3.0 版本开始,Spring Integration 还提供了一个内置的#xpath
用于表达式的 SpEL 函数。.
JMS 标头映射
这DefaultJmsHeaderMapper
现在映射传入的JMSPriority
Spring Integration 的标头priority
页眉。
以前priority
仅考虑出站消息。
有关详细信息,请参阅将消息头映射到 JMS 消息或映射 JMS 消息。
JMS 出站通道适配器
JMS 出站通道适配器现在支持session-transacted
属性(默认:false
).
以前,您必须注入自定义的JmsTemplate
使用事务。
请参阅出站通道适配器。
JMS 入站通道适配器
JMS 入站通道适配器现在支持session-transacted
属性(默认:false
).
以前,您必须注入自定义的JmsTemplate
使用事务。
适配器允许在acknowledgeMode
,这是不正确的并且不起作用。
不再允许此值。
请参阅入站通道适配器。
数据类型通道
您现在可以指定一个MessageConverter
在将有效负载(如有必要)转换为可接受的负载之一时使用datatype
实例。
有关详细信息,请参阅数据类型通道配置。
更简单的重试建议配置
我们添加了简化的命名空间支持,以配置RequestHandlerRetryAdvice
.
有关详细信息,请参阅配置重试建议。
相关性终结点:基于时间的发布策略
我们添加了互斥的group-timeout
和group-timeout-expression
属性设置为<int:aggregator>
和<int:resequencer>
.
这些属性允许强制完成部分MessageGroup
,前提是ReleaseStrategy
不会释放组,并且在指定的时间内没有进一步的消息到达。
有关详细信息,请参阅使用 XML 配置聚合器。
Redis 元数据存储
这RedisMetadataStore
现在实现ConcurrentMetadataStore
,让它在AbstractPersistentAcceptOnceFileListFilter
在多应用程序实例或服务器环境中实现。
有关详细信息,请参阅 Redis 元数据存储、读取文件、FTP 入站通道适配器和 SFTP 入站通道适配器。
JdbcChannelMessageStore
和PriorityChannel
T'JdbcChannelMessageStore' 现在实现PriorityCapableChannelMessageStore
,让它用作message-store
参考priority-queue
实例。
有关详细信息,请参阅支持消息通道。
FTP 超时
这DefaultFtpSessionFactory
现在公开connectTimeout
,defaultTimeout
和dataTimeout
属性,避免了对工厂进行子类化来设置这些公共属性。
这postProcess*
方法仍然可用于更高级的配置。
有关更多信息,请参阅 FTP 会话工厂。
唽:StatusUpdatingMessageHandler
这StatusUpdatingMessageHandler
(<int-twitter:outbound-channel-adapter>
) 现在支持tweet-data-expression
属性来构建一个org.springframework.social.twitter.api.TweetData
对象,用于更新时间轴状态。
例如,此功能允许附加图像。
有关更多信息,请参阅 Spring Integration Social Twitter。
JPA 检索网关:id-expression
我们引入了id-expression
属性<int-jpa:retrieving-outbound-gateway>
执行EntityManager.find(Class entityClass, Object primaryKey)
.
有关详细信息,请参阅检索出站网关。
TCP 反序列化事件
当其中一个标准反序列化程序在将输入流解码为消息时遇到问题时,它现在会发出TcpDeserializationExceptionEvent
,允许应用程序检查发生异常时的数据。
有关详细信息,请参阅 TCP 连接事件。
消息传递注释@Bean
定义
您现在可以配置消息传递注释 (@ServiceActivator
,@Router
,@InboundChannelAdapter
等)@Bean
中的定义@Configuration
类。
有关详细信息,请参阅注释支持。
2.2 和 3.0 之间的更改
新组件
3.0 版添加了许多新组件。
HTTP 请求映射
HTTP 模块现在为入站端点提供强大的请求映射支持。
我们将UriPathHandlerMapping
类与IntegrationRequestMappingHandlerMapping
,以integrationRequestMappingHandlerMapping
在应用程序上下文中。
解析 HTTP 入站端点时,新的IntegrationRequestMappingHandlerMapping
Bean 已注册或现有 Bean 被重用。
为了实现灵活的请求映射配置,Spring Integration 提供了<request-mapping/>
child 元素的<http:inbound-channel-adapter/>
和<http:inbound-gateway/>
.
现在,两个 HTTP 入站端点都完全基于 Spring MVC 3.1 中引入的请求映射基础设施。
例如,单个入站终结点支持多个路径。
有关详细信息,请参阅 HTTP 命名空间支持。
Spring 表达式语言 (SpEL) 配置
我们添加了一个新的IntegrationEvaluationContextFactoryBean
允许配置自定义PropertyAccessor
在整个框架的 SpEL 表达式中使用的实现和函数。
有关更多信息,请参阅 Spring 表达式语言 (SpEL)。
SpEL 函数支持
自定义 SpELEvaluationContext
带静态Method
函数,我们引入了<spel-function/>
元件。
我们还添加了两个内置函数:#jsonPath
和#xpath
.
有关详细信息,请参阅 SpEL 函数。
SpEL PropertyAccessors 支持
自定义 SpELEvaluationContext
跟PropertyAccessor
实现时,我们添加了<spel-property-accessors/>
元件。
有关详细信息,请参阅属性访问器。
Redis:新组件
我们添加了一个新的基于 Redis 的MetadataStore
实现。
您可以使用RedisMetadataStore
以保持MetadataStore
跨应用程序重启。
这个新的MetadataStore
实现可以与适配器一起使用,例如:
-
Twitter 入站适配器
-
进站通道适配器
我们添加了新的基于队列的组件。
我们添加了<int-redis:queue-inbound-channel-adapter/>
和<int-redis:queue-outbound-channel-adapter/>
组件分别在 Redis List 上执行“右弹出”和“左推”作。
有关详细信息,“请参阅 Redis 支持”。
标头通道注册表
现在,您可以指示框架将回复通道和错误通道存储在注册表中,以便以后解决。
这对于以下情况很有用replyChannel
或errorChannel
可能会丢失(例如,在序列化消息时)。
有关详细信息,请参阅标头扩充器。
MongoDB 支持:新增ConfigurableMongoDbMessageStore
除了现有的eMongoDbMessageStore
,我们引入了一个新的ConfigurableMongoDbMessageStore
.
这提供了更健壮和灵活的实现MessageStore
对于 MongoDB。
它与现有商店没有向后兼容性,但我们建议将其用于新应用程序。
现有应用程序可以使用它,但旧存储中的消息不可用。
有关更多信息,请参阅 MongoDb 支持。
系统日志支持
基于 2.2SyslogToMapTransformer
,Spring Integration 3.0 引入UDP
和TCP
专为接收 SYSLOG 消息而定制的入站通道适配器。
有关详细信息,请参阅 Syslog 支持。
tail
支持
我们添加了文件入站通道适配器,这些适配器使用tail
命令在将行添加到文本文件末尾时生成消息。
参见“尾部”文件。
JMX 支持
我们添加了<int-jmx:tree-polling-channel-adapter/>
.
此适配器查询 JMX MBean 树并发送一条消息,其中包含有效负载,该有效负载是与查询匹配的对象的图形。
默认情况下,MBean 映射到原语和简单对象(例如Map
,List
和数组)。
它允许简单转换为 JSON。
这IntegrationMBeanExporter
现在允许配置自定义ObjectNamingStrategy
通过使用naming-strategy
属性。
有关更多信息,请参阅 JMX 支持。
TCP/IP 连接事件和连接管理
TcpConnection
实例现在发出ApplicationEvent
实例(具体来说TcpConnectionEvent
实例),当连接打开或关闭或发生异常时。
此更改允许应用程序使用普通的 Spring 通知应用程序对 TCP 连接的更改ApplicationListener
机制。
我们重命名AbstractTcpConnection
自TcpConnectionSupport
.
作为此类子类的自定义连接可以使用其方法发布事件。
同样,我们将AbstractTcpConnectionInterceptor
自TcpConnectionInterceptorSupport
.
此外,我们还添加了<int-ip:tcp-connection-event-inbound-channel-adapter/>
.
默认情况下,此适配器将所有TcpConnectionEvent
instances 到Channel
.
此外,TCP 连接工厂现在提供了一种名为getOpenConnectionIds()
,它返回所有打开连接的标识符列表。
它允许应用程序广播到所有打开的连接,以及其他用途。
最后,连接工厂还提供了一种名为closeConnection(String connectionId)
,它允许应用程序使用其 ID 显式关闭连接。
有关详细信息,请参阅 TCP 连接事件。
入站通道适配器脚本支持
这<int:inbound-channel-adapter/>
现在支持使用<expression/>
和<script/>
child 元素创建MessageSource
.
请参阅通道适配器表达式和脚本。
内容丰富器:标头扩充支持
内容扩充器现在提供<header/>
子元素,以根据基础消息流中的应答消息,使用标头扩充出站消息。
有关详细信息,请参阅有效负载扩充器。
一般更改
本节介绍从 2.2 版到 3.0 版的一般更改。
消息 ID 生成
以前,消息 ID 是使用 JDK 生成的UUID.randomUUID()
方法。
在此版本中,默认机制已更改为使用更高效、更快的算法。
此外,我们还添加了更改用于生成消息 ID 的策略的功能。
有关详细信息,请参阅消息 ID 生成。
“<网关>”更改
现在可以在所有网关方法中设置通用标头,并且我们添加了更多选项,用于向消息添加有关调用哪个方法的信息。
现在,您可以完全自定义网关方法调用映射到消息的方式。
这GatewayMethodMetadata
现在是一个公共课程。
它允许您以编程方式配置GatewayProxyFactoryBean
来自爪哇。
有关详细信息,请参阅消息传递网关。
HTTP 端点更改
-
出站终结点
encode-uri
:<http:outbound-gateway/>
和<http:outbound-channel-adapter/>
现在提供一个encode-uri
属性,允许在发送请求之前禁用 URI 对象的编码。 -
入站端点
merge-with-default-converters
:<http:inbound-gateway/>
和<http:inbound-channel-adapter/>
现在有一个merge-with-default-converters
属性以包含默认列表HttpMessageConverter
自定义消息转换器之后的实例。 -
If-Modified-Since
和If-Unmodified-Since
HTTP 标头:以前,If-Modified-Since
和If-Unmodified-Since
HTTP 标头在映射在DefaultHttpHeaderMapper
. 现在,除了纠正这个问题之外,DefaultHttpHeaderMapper
为任何接受日期时间值的 HTTP 标头提供格式化字符串的日期解析。 -
入站端点表达式变量:除了现有的
#requestParams
和#pathVariables
这<http:inbound-gateway/>
和<http:inbound-channel-adapter/>
现在支持其他有用的变量:#matrixVariables
,#requestAttributes
,#requestHeaders
和#cookies
. 这些变量在有效负载和标头表达式中都可用。 -
出站端点 'uri-variables-expression':HTTP 出站端点现在支持
uri-variables-expression
属性来指定Expression
要评估Map
对于 URL 模板中的所有 URI 变量占位符。 这允许根据传出消息选择不同的表达式映射。
有关详细信息,请参阅 HTTP 支持。
Jackson支持 (JSON)
-
引入了 JSON 转换的新抽象。 目前提供了 Jackson 1.x 和 Jackson 2 的实现,版本由类路径上的存在情况决定。 以前,仅支持 Jackson 1.x。
-
这
ObjectToJsonTransformer
和JsonToObjectTransformer
现在发出/使用包含类型信息的标头。
有关详细信息,请参阅 Transformer 中的“JSON Transformer”。
链元素id
属性
以前,id
属性<chain>
被忽视,在某些情况下,甚至被禁止。
现在,id
属性允许用于<chain>
.
链元素的 bean 名称是周围链的id
和id
元素本身。
例如:“myChain$child.myTransformer.handler”。
有关详细信息,请参阅消息处理程序链。
聚合器“empty-group-min-timeout”属性
这AbstractCorrelatingMessageHandler
提供了一个名为empty-group-min-timeout
以允许空组过期比过期的部分组更长的时间表运行。
空组不会从MessageStore
直到它们至少在这个毫秒数内没有被修改。
有关详细信息,请参阅使用 XML 配置聚合器。
持久文件列表过滤器(文件,(S)FTP)
新增功能FileListFilter
使用 persistentMetadataStore
现已上市。
您可以使用这些来防止系统重新启动后出现重复文件。
有关更多信息,请参阅读取文件、FTP 入站通道适配器和 SFTP 入站通道适配器。
直接通道负载平衡配置
以前,在配置LoadBalancingStrategy
在频道的dispatcher
child 元素,唯一可用的选项是使用预定义的值枚举,这不允许开发人员设置LoadBalancingStrategy
.
您现在可以使用load-balancer-ref
提供对LoadBalancingStrategy
.
有关更多信息,请参阅DirectChannel
.
PublishSubscribeChannel 行为
以前,发送到没有订阅者的<publish-subscribe-channel/>会返回false
结果。
如果与MessagingTemplate
,这将导致引发异常。
现在,PublishSubscribeChannel
有一个名为minSubscribers
(默认值:0
).
如果消息至少发送给最小数量的订阅者,则发送作被视为成功(即使该数字为零)。
如果应用程序希望在这些条件下获得异常,请将最小订阅者设置为至少 1。
FTP、SFTP 和 FTPS 更改
默认情况下,FTP、SFTP 和 FTPS 端点不再缓存会话。
我们删除了已弃用的cached-sessions
属性。
以前,由此属性值控制的嵌入式缓存机制没有提供限制缓存大小的方法,缓存可能会无限增长。
2.1 版推出CachingConnectionFactory
,它成为缓存会话的首选(现在是唯一的)方法。
CachingConnectionFactory
现在提供了一种新方法:resetCache()
.
此方法会立即关闭空闲会话,并导致正在使用的会话在返回到缓存时关闭。
这DefaultSftpSessionFactory
(结合CachingSessionFactory
) 现在支持通过单个 SSH 连接进行多路复用通道(仅限 SFTP)。
FTP、SFTP 和 FTPS 入站适配器
以前,无法覆盖用于处理从远程服务器检索到的文件的默认过滤器。
这filter
属性确定要检索哪些文件,但FileReadingMessageSource
使用AcceptOnceFileListFilter
.
这意味着,如果检索的文件的新副本与以前复制的文件同名,则不会从适配器发送任何消息。
在此版本中,一个新属性local-filter
允许您覆盖默认过滤器(例如,使用AcceptAllFileListFilter
或其他一些自定义过滤器)。
如果你想要AcceptOnceFileListFilter
要在 JVM 执行中进行维护,您现在可以配置一个自定义过滤器来保留状态,也许是在文件系统上。
入站通道适配器现在支持preserve-timestamp
属性,将本地文件修改时间戳设置为来自服务器的时间戳(默认:false
).
FTP、SFTP 和 FTPS 网关
网关现在支持mv
命令,启用远程文件的重命名。
网关现在支持递归ls
和mget
命令,启用远程文件树的检索。
网关现在支持put
和mput
命令,允许将文件发送到远程服务器。
这local-filename-generator-expression
现在支持属性,从而在检索期间启用本地文件的命名。
默认情况下,使用与远程文件相同的名称。
这local-directory-expression
现在支持属性,从而在检索期间(基于远程目录)命名本地目录。
远程文件模板
一个新的更高级别的抽象 (RemoteFileTemplate
) 在Session
FTP 和 SFTP 模块使用的实现。
虽然它由端点在内部使用,但您也可以以编程方式使用此抽象。
像所有的Spring一样*Template
实现时,它可靠地关闭底层会话,同时允许对会话进行低级访问。
有关详细信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
出站网关的“requires-reply”属性
所有出站网关(例如<jdbc:outbound-gateway/>
或<jms:outbound-gateway/>
) 专为“请求-回复”方案而设计。
外部服务需要响应,并发布到reply-channel
或replyChannel
消息头。
但是,在某些情况下,外部系统可能并不总是返回结果(例如,
一个<jdbc:outbound-gateway/>
当 SELECT 以空ResultSet
或者可能是单向 Web 服务)。
因此,开发人员需要一个选项来配置是否需要回复。
为此,我们引入了requires-reply
出站网关组件的属性。
在大多数情况下,默认值requires-reply
是true
.
如果没有结果,则ReplyRequiredException
被抛出。
将值更改为false
这意味着,如果外部服务未返回任何内容,那么消息流将在该点结束,类似于出站通道适配器。
WebService 出站网关有一个名为ignore-empty-responses .
它用于处理空的String 响应,就好像没有收到响应一样。
默认情况下,它是true ,但您可以将其设置为false 以允许应用程序接收空的String 在回复消息有效负载中。
当属性为true ,出于requires-reply 属性。
默认情况下,requires-reply 为 false。 |
请注意,requiresReply
属性以前存在,但设置为false
在AbstractReplyProducingMessageHandler
,并且无法使用 XML 命名空间在出站网关上配置它。
以前,未收到回复的网关将以静默方式结束流(并显示 DEBUG 日志消息)。
默认情况下,通过此更改,大多数网关现在都会引发异常。
要恢复到以前的行为,请将requires-reply 自false . |
AMQP 出站网关标头映射
以前,<int-amqp:outbound-gateway/>在调用消息转换器之前映射标头,转换器可以覆盖标头,例如content-type
.
出站适配器在转换后映射标头,这意味着像content-type
从出站Message
(如果存在)被使用。
从此版本开始,网关现在在消息转换后映射标头,与适配器一致。
如果应用程序依赖于以前的行为(其中转换器的标头覆盖映射的标头),则需要筛选这些标头(在消息到达网关之前)或适当地设置它们。
受SimpleMessageConverter
是content-type
和content-encoding
.
自定义消息转换器可能会设置其他标头。
存储过程组件改进
对于标准不支持的更复杂的数据库特定类型CallableStatement.getObject
方法中,我们引入了两个新的附加属性<sql-parameter-definition/>
带有 OUT 方向的元素:
-
type-name
-
return-type
这row-mapper
存储过程入站通道适配器的属性<returning-resultset/>
child 元素现在支持对RowMapper
bean 定义。
以前,它只包含一个类名(仍然受支持)。
有关详细信息,请参阅存储过程。
Web 服务出站 URI 配置
Web 服务出站网关“uri”属性现在支持<uri-variable/>
替换 Spring Web Services 支持的所有 URI 方案。
有关详细信息,请参阅出站 URI 配置。
Redis 适配器更改
Redis 入站通道适配器现在可以使用null
值serializer
属性,原始数据是消息有效负载。
Redis 出站通道适配器现在具有topic-expression
属性来确定Message
在运行时。
Redis 入站通道适配器,除了现有的topics
属性,现在具有topic-patterns
属性。
有关详细信息,请参阅 Redis 支持。
Advising Filters
以前,当<filter/>
有一个<request-handler-advice-chain/>
,则丢弃作全部在通知链的范围内执行(包括discard-channel
).
过滤器元件现在有一个名为discard-within-advice
(默认值:true
) 以允许在通知链完成后执行丢弃作。
请参阅建议过滤器。
使用注释为端点提供建议
现在可以使用注释配置请求处理程序通知链。 请参阅使用注释通知端点。
ObjectToStringTransformer 改进
此转换器现在可以正确转换byte[]
和char[]
payloads 到String
.
有关详细信息,请参阅 Transformer。
JPA 支持更改
要持久化或合并的有效负载现在可以是java.lang.Iterable
.
在这种情况下,每个对象返回的Iterable
被视为实体,并使用基础EntityManager
.
迭代器返回的 Null 值将被忽略。
JPA 适配器现在具有附加属性,可以在执行持久性作后选择性地从关联的持久性上下文中刷新和清除实体。
检索网关没有指定要检索的第一条记录的机制,这是一个常见的用例。
检索网关现在支持通过添加first-result
和first-result-expression
属性添加到网关定义中。
有关详细信息,请参阅检索出站网关。
JPA 检索网关和入站适配器现在具有一个属性,用于将结果集中的最大结果数指定为表达式。
此外,我们还引入了max-results
要替换的属性max-number-of-results
,该文件已被弃用。max-results
和max-results-expression
用于分别提供最大结果数或表达式来计算结果集中的最大结果数。
有关更多信息,请参阅 JPA 支持。
Delayer:延迟表达
以前,<delayer>
提供了一个delay-header-name
属性来确定运行时的延迟值。
在复杂情况下,<delayer>
前面必须加上<header-enricher>
.
Spring Integration 3.0 引入了expression
属性和expression
用于动态延迟确定的子元素。
这delay-header-name
属性现在已弃用,因为您可以在expression
.
此外,我们还引入了ignore-expression-failures
以控制表达式求值失败时的行为。
有关详细信息,请参阅 Delayer。
JDBC 消息存储改进
Spring Integration 3.0 为 MySQL 版本 5.6.4 及更高版本添加了一组新的 DDL 脚本。 现在 MySQL 支持小数秒,从而改进了从基于 MySQL 的消息存储轮询时的 FIFO 排序。 有关详细信息,请参阅通用 JDBC 消息存储。
IMAP 空闲连接异常
以前,如果 IMAP 空闲连接失败,则会记录它,但没有通知应用程序的机制。
此类异常现在会生成ApplicationEvent
实例。
应用程序可以使用<int-event:inbound-channel-adapter>
或任何ApplicationListener
配置为接收ImapIdleExceptionEvent
(或其超类之一)。
消息头和 TCP
TCP 连接工厂现在支持配置灵活的机制,以通过 TCP 传输选定的标头(以及有效负载)。
一个新的TcpMessageMapper
启用标头的选择,并且您需要配置适当的序列化程序或反序列化程序来写入生成的Map
到 TCP 流。
我们添加了一个MapJsonSerializer
作为通过 TCP 传输标头和有效负载的便捷机制。
有关详细信息,请参阅传输标头。
JMS 消息驱动通道适配器
以前,在配置<message-driven-channel-adapter/>
,如果您希望使用特定的TaskExecutor
,您必须声明一个容器 bean 并通过设置container
属性。
我们添加了task-executor
,让它直接设置在适配器上。
这是对已经可用的其他几个容器属性的补充。
XsltPayloadTransformer
现在,您可以通过设置transformer-factory-class
属性。
看XsltPayloadTransformer
.
2.1 和 2.2 之间的更改
新组件
2.2 版添加了许多新组件。
RedisStore
入站和出站通道适配器
Spring Integration 现在有RedisStore
入站和出站通道适配器,让您写入和读取Message
有效负载进出 Redis 集合。有关详细信息,请参阅 RedisStore 出站通道适配器和 Redis 存储入站通道适配器。
MongoDB 入站和出站通道适配器
Spring Integration 现在具有 MongoDB 入站和出站通道适配器,允许您写入和读取Message
有效负载进出 MongoDB 文档存储。有关更多信息,请参阅 MongoDB 出站通道适配器和 MongoDB 入站通道适配器。
一般更改
本节介绍从 2.1 版到 2.2 版的一般更改。
向端点添加行为
添加<advice-chain/>
向轮询者提供已经有一段时间了。
但是,由此添加的行为会影响整个集成流。
它没有解决向单个终结点添加(例如)重试的功能。
2.2 版本引入了<request-handler-advice-chain/>
到许多端点。
此外,为此,我们添加了三个标准建议类:
-
MessageHandlerRetryAdvice
-
MessageHandlerCircuitBreakerAdvice
-
ExpressionEvaluatingMessageHandlerAdvice
有关详细信息,请参阅向终结点添加行为。
事务同步和伪事务
轮询者现在可以参与 Spring 的事务同步功能。 这允许同步诸如通过入站通道适配器重命名文件等作,具体取决于事务是提交还是回滚。
此外,当不存在“真实”事务时,您可以通过PseudoTransactionManager
.
有关详细信息,请参阅事务同步。
文件适配器:改进了文件覆盖和追加处理
使用文件出站通道适配器或文件出站网关时,可以使用新的mode
财产。
在 Spring Integration 2.2 之前,目标文件在存在时被替换。
现在您可以指定以下选项:
-
REPLACE
(默认) -
APPEND
-
FAIL
-
IGNORE
有关详细信息,请参阅处理现有目标文件。
将 reply-timeout 添加到更多出站网关
XML 命名空间支持将 reply-timeout 属性添加到以下出站网关:
-
AMQP 出站网关
-
文件出站网关
-
FTP 出站网关
-
SFTP 出站网关
-
WS 出站网关
弹簧-AMQP 1.1
Spring Integration 现在使用 Spring AMQP 1.1。 这使得可以在 Spring Integration 应用程序中使用多个功能,包括:
-
出站网关的固定应答队列
-
HA(镜像)队列
-
发布商确认
-
返回的消息
-
支持死信交换和死信队列
JDBC 支持 - 存储过程组件
SpEL 支持
使用 Spring Integration JDBC Adapter 的存储过程组件时,您现在可以使用 Spring 表达式语言 (SpEL) 提供存储过程名称或存储函数名称。
这样做可以指定要在运行时调用的存储过程。 例如,可以提供要通过消息标头执行的存储过程名称。 有关详细信息,请参阅存储过程。
JDBC 支持:特定于通道的消息存储实现
我们添加了一个新的特定于消息通道的消息存储实现,使用特定于数据库的 SQL 查询提供了更具可扩展性的解决方案。 有关详细信息,请参阅支持消息通道。
有序关机
我们添加了一个名为stopActiveComponents()
到IntegrationMBeanExporter
.
它允许有序地关闭 Spring Integration 应用程序,不允许向某些适配器发送新的入站消息,并等待一段时间以允许正在进行的消息完成。
ObjectToJsonTransformer
默认情况下,ObjectToJsonTransformer
现在将content-type
header 到application/json
.
有关详细信息,请参阅 Transformer。
HTTP 支持
默认情况下,不再启用基于 HTTP 的 Java 序列化。
以前,当将expected-response-type
在Serializable
对象,则Accept
标头设置不正确。
我们更新了SerializingHttpMessageConverter
将Accept
header 到application/x-java-serialized-object
.
但是,由于这可能会导致与现有应用程序不兼容,因此我们决定不再自动将此转换器添加到 HTTP 端点。
如果您希望使用 Java 序列化,则需要将SerializingHttpMessageConverter
使用message-converters
属性(当您使用 XML 配置时)或使用setMessageConverters()
方法(在 Java 中)。
或者,您可能希望考虑使用 JSON。
它是通过拥有Jackson
在类路径上。
2.0 和 2.1 之间的更改
请参阅迁移指南,了解可能影响应用程序的重要更改。
新组件
2.1 版添加了许多新组件。
JSR-223 脚本支持
在 Spring Integration 2.0 中,我们添加了对 Groovy 的支持。 在 Spring Integration 2.1 中,我们通过实现对 JSR-223(“Java™ 平台脚本编写”)的支持,大幅扩展了对其他语言的支持。 现在,您可以使用任何支持 JSR-223 的脚本语言,包括:
-
Javascript的
-
Ruby 和 JRuby
-
Python 和 Jython
-
槽的
有关更多详细信息,请参阅脚本支持。
AMQP 支持
Spring Integration 2.1 添加了多个通道适配器,用于使用高级消息队列协议 (AMQP) 接收和发送消息。 此外,Spring Integration 还提供了点对点消息通道和发布-订阅消息通道,这两个通道都由 AMQP Exchange 和 Queues 支持。
有关更多详细信息,请参阅 AMQP 支持。
MongoDB 支持
从版本 2.1 开始,Spring Integration 通过提供基于 MongoDB 的 MongoDB 来提供对 MongoDB 的支持MessageStore
.
有关更多详细信息,请参阅 MongoDb 支持。
Redis 支持
从 2.1 版开始,Spring Integration 通过提供基于 Redis 的 Redis 来支持 Redis,这是一个高级键值存储MessageStore
以及发布-订阅消息传递适配器。
有关更多详细信息,请参阅 Redis 支持。
支持 Spring 的资源抽象
在 2.1 版中,我们引入了一个新的资源入站通道适配器,它建立在 Spring 的资源抽象之上,以支持跨各种实际类型的底层资源(例如文件、URL 或类路径资源)的更大灵活性。 因此,它类似于文件入站通道适配器,但比文件入站通道适配器更通用。
有关更多详细信息,请参阅资源入站通道适配器。
存储过程组件
在 Spring Integration 2.1 中,JDBC
Module 还通过添加多个新组件(包括入站和出站通道适配器以及出站网关)来提供存储过程支持。
存储过程支持利用 Spring 的SimpleJdbcCall
类,因此支持以下存储过程:
-
阿帕奇德比
-
DB2
-
MySQL
-
Microsoft SQL Server
-
神谕
-
PostgreSQL
-
赛贝斯
存储过程组件还支持以下数据库的 SQL 函数:
-
MySQL
-
Microsoft SQL Server
-
神谕
-
PostgreSQL
有关更多详细信息,请参阅存储过程。
XPath 和 XML 验证过滤器
Spring Integration 2.1 提供了一个新的基于 XPath 的消息过滤器。
它是XML
模块。
XPath 过滤器允许您使用 XPath 表达式过滤消息。
我们还添加了 XML 验证过滤器的文档。
有关更多详细信息,请参阅使用 XPath 过滤器和 XML 验证过滤器。
有效载荷丰富器
从 Spring Integration 2.1 开始,我们添加了有效负载扩充器。
有效负载扩充器定义了一个端点,该端点通常会传递Message
到公开的请求通道,然后需要回复消息。
然后,回复消息成为用于评估表达式以丰富目标有效负载的根对象。
有关更多详细信息,请参阅有效负载扩充器。
框架重构
我们以多种方式重构了 Spring Integration 框架,所有这些都在本节中描述。
标准化路由器配置
我们使用 Spring Integration 2.1 标准化了所有路由器实现的路由器参数,以提供更一致的用户体验。
在 Spring Integration 2.1 中,我们删除了ignore-channel-name-resolution-failures
属性,以支持将其行为与resolution-required
属性。
此外,resolution-required
属性现在默认为true
.
从 Spring Integration 2.1 开始,如果未定义默认输出通道,路由器将不再静默删除任何消息。
这意味着,默认情况下,路由器现在至少需要一个解析的通道(如果没有default-output-channel
已设置),并且默认情况下,抛出一个MessageDeliveryException
如果未确定通道(或尝试发送不成功)。
但是,如果您确实想以静默方式删除消息,您可以将default-output-channel="nullChannel"
.
随着路由器参数的标准化和前面描述的参数的整合,基于 Spring Integration 的旧应用程序可能会中断。 |
有关更多详细信息,请参阅Routers
.
XML 模式更新至 2.1
Spring Integration 2.1 附带了更新的 XML Schema(版本 2.1)。 它提供了许多改进,例如前面讨论的路由器标准化。
从现在开始,开发人员必须始终声明最新的 XML 模式(当前版本为 2.1)。 或者,他们可以使用无版本架构。 通常,最好的选择是使用无版本命名空间,因为这些命名空间会自动使用最新可用版本的 Spring Integration。
以下示例声明了一个无版本的 Spring Integration 命名空间:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xsi:schemaLocation="http://www.springframework.org/schema/integration
https://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
...
</beans>
以下示例声明具有显式版本的 Spring Integration 命名空间:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xsi:schemaLocation="http://www.springframework.org/schema/integration
https://www.springframework.org/schema/integration/spring-integration-2.2.xsd
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
...
</beans>
旧的 1.0 和 2.0 模式仍然存在。 但是,如果应用程序上下文仍然引用这些已弃用的模式之一,则验证器在初始化时失败。
源代码控制管理和构建基础架构
2.1 版对源代码管理管理和构建基础结构进行了许多更改。 本节介绍这些更改。
源代码现已托管在 Github 上
从 2.0 版开始,Spring Integration 项目使用 Git 进行版本控制。 为了进一步提高社区的知名度,该项目从 SpringSource 托管的 Git 存储库转移到了 Github。 Spring Integration Git 存储库位于:spring-integration。
对于该项目,我们还改进了提供代码贡献的流程。 此外,我们确保每项提交都经过同行评审。 事实上,核心提交者现在遵循与贡献者相同的流程。 有关更多详细信息,请参阅贡献。
使用 Sonar 提高源代码可见性
为了提供更好的源代码可见性,从而监控 Spring Integration 源代码的质量,我们设置了一个 Sonar 实例。 我们每晚收集指标并在 sonar.spring.io 提供。
新样本
对于 Spring Integration 的 2.1 版本,我们还扩展了 Spring Integration 示例项目并添加了许多新示例,例如涵盖 AMQP 支持的示例、展示新有效负载扩充器的示例、说明测试 Spring Integration 流片段的技术的示例以及针对 Oracle 数据库执行存储过程的示例。 有关详细信息,请访问 spring-integration-samples。
1.0 版和 2.0 版之间的更改
请参阅迁移指南,了解可能影响应用程序的重要更改。
Spring 3 支持
Spring Integration 2.0 建立在 Spring 3.0.5 之上,并向我们的用户提供了许多功能。
[[2.0-spel-support]]===== 对 Spring 表达式语言 (SpEL) 的支持
您现在可以在 Spring Integration 核心命名空间的转换器、路由器、过滤器、拆分器、聚合器、服务激活器、标头扩充器以及各种适配器中的更多元素中使用 SpEL 表达式。 本指南包含许多示例。
转换服务和转换器
您现在可以在配置许多 Spring Integration 组件(例如 Datatype 通道)时受益于 Spring 提供的转换服务支持。 请参阅消息通道实现和服务激活器。 此外,上一点提到的 SpEL 支持也依赖于转换服务。 因此,您可以注册一次转换器,并在使用 SpEL 表达式的任何地方利用它们。
TaskScheduler
和Trigger
Spring 3.0 定义了两个与调度相关的新策略:TaskScheduler
和Trigger
. Spring Integration(使用大量调度)现在建立在这些组件之上。事实上,Spring Integration 1.0最初定义了一些组件(例如CronTrigger
)现在已迁移到 Spring 3.0 的核心 API 中。现在,您可以从在整个应用程序上下文中重用相同的组件中受益(而不仅仅是 Spring Integration 配置)。我们还通过提供用于直接配置速率、延迟、cron 表达式和触发器引用的属性,大大简化了 Spring Integration 轮询器的配置。有关示例配置,请参阅 Channel Adapter。
RestTemplate
和HttpMessageConverter
我们的出站 HTTP 适配器现在委托给 Spring 的RestTemplate
用于执行 HTTP 请求并处理其响应。这也意味着您可以重用任何自定义HttpMessageConverter
实现。 有关更多详细信息,请参阅 HTTP 出站组件。
新的通道适配器和网关
我们在 Spring Integration 2.0 中添加了几个新的通道适配器和消息传递网关。
TCP 和 UDP 适配器
我们添加了用于通过 TCP 和 UDP 互联网协议接收和发送消息的通道适配器。 有关更多详细信息,请参阅 TCP 和 UDP 支持。 另请参阅以下博客:“在 Spring Integration 2.0 M3 中使用 UDP 和 TCP 适配器”。
Twitter 适配器
Twitter 适配器支持发送和接收 Twitter 状态更新以及直接消息。 您还可以使用入站渠道适配器执行 Twitter 搜索。 有关更多详细信息,请参阅 Spring Integration Social Twitter。
XMPP 适配器
新的 XMPP 适配器支持聊天消息和状态事件。 有关更多详细信息,请参阅 XMPP 支持。
FTP 和 FTPS 适配器
现在提供通过 FTP 和 FTPS 的入站和出站文件传输支持。 有关更多详细信息,请参阅 FTP/FTPS 适配器。
SFTP 适配器
现在提供通过 SFTP 的入站和出站文件传输支持。 有关更多详细信息,请参阅 SFTP 适配器。
进纸适配器
我们还添加了用于接收新闻提要(ATOM 和 RSS)的频道适配器。 有关更多详细信息,请参阅 Feed Adapter。
其他新增内容
Spring Integration 添加了许多其他功能。 本节介绍它们。
Groovy 支持
Spring Integration 2.0 添加了 Groovy 支持,允许您使用 Groovy 脚本语言来提供集成和业务逻辑。 有关更多详细信息,请参阅 Groovy 支持。
地图转换器
这些对称转换器将有效负载对象与Map
对象。
有关更多详细信息,请参阅 Transformer。
JSON 转换器
这些对称转换器将有效负载对象与 JSON 进行转换或从 JSON 进行转换。 有关更多详细信息,请参阅 Transformer。
序列化转换器
这些对称转换器将有效负载对象与字节数组进行转换或从字节数组转换。它们还支持 Spring 3.0.5 添加的序列化器和反序列化器策略接口。有关更多详细信息,请参阅 Transformer。
新的源代码控制管理和构建基础架构
在 Spring Integration 2.0 中,我们将构建环境切换为使用 Git 进行源代码控制。要访问我们的存储库,请访问 https://git.springsource.org/spring-integration。我们还将构建系统切换到 Gradle。
新的 Spring 集成示例
在 Spring Integration 2.0 中,我们已将示例与主发行版分离。请阅读以下博客以获取更多信息:新的 Spring Integration 示例。我们还创建了许多新示例,包括每个新适配器的示例。
用于 Spring 集成的 Spring 工具套件可视化编辑器
最新版本的 SpringSource Tool Suite 中包含一个令人惊叹的新 Spring Integration 可视化编辑器。 如果您还没有使用 STS,可以在 Spring Tool Suite 下载它。