更改历史记录
新组件
添加了用于集成流定义的 Groovy DSL 实现。 有关更多信息,请参阅 Groovy DSL。
MQTT 客户端管理器
新的 MQTTClientManager
已添加以支持跨不同通道适配器的可重用 MQTT 连接。
有关更多信息,请参阅共享 MQTT 客户端支持。
GraphQL 支持
添加了 GraphQL 支持。 有关更多信息,请参阅 GraphQL 支持。
Apache Camel 支持
引入了对 Apache Camel 路由的支持。 有关更多信息,请参阅 Apache Camel 支持。
Hazelcast 支持
Hazelcast Spring 集成扩展项目已作为spring-integration-hazelcast
模块。
有关更多信息,请参阅 Hazelcast 支持。
SMB 支持
SMB 支持已从 Spring Integration Extensions 项目添加。
Java DSL(参见org.springframework.integration.smb.dsl.Smb
factory)也已添加到此模块中。
一SmbStreamingMessageSource
和SmbOutboundGateway
implementation 的 implementation 进行介绍。
有关详细信息,请参阅 SMB 支持。
PostgreSQL 推送通知
一个PostgresSubscribableChannel
允许通过以下方式接收推送通知PostgresChannelMessageTableSubscriber
在新消息添加到JdbcChannelMessageStore
.
有关更多信息,请参阅 PostgreSQL:接收推送通知。
RabbitMQ 流队列支持
AMQP 模块已得到增强,可为使用 RabbitMQ Stream Queues 的入站和出站通道适配器提供支持。 有关更多信息,请参阅 RabbitMQ 流队列支持。
Apache MINA SFTP
SFTP 模块已从过时的 JCraft JSch 库完全重新设计为更健壮和现代org.apache.sshd:sshd-sftp
Apache MINA 项目的模块。
有关更多信息,请参阅 SFTP 适配器。
千分尺观察
现在支持使用 Micrometer 对计时器启用观察和跟踪。 有关更多信息,请参阅千分尺观测。
GraalVM Polyglot 支持
脚本模块现在提供了一个PolyglotScriptExecutor
基于 GraalVM Polyglot 支持的实现。
JavaScript 支持现在基于此执行程序,因为它的 JSR223 实现已从 Java 中删除。
有关更多信息,请参阅脚本支持。
Apache Cassandra 支持
Apache Cassandra Spring Integration Extensions 项目已作为spring-integration-cassandra
模块。
有关更多信息,请参阅 Apache Cassandra 支持。
本机映像
支持创建 GraalVM 原生映像。 有关更多信息,请参阅本机映像支持。
一般更改
消息传递注释现已推出@Repeatable
并且可以在同一个 service 方法上多次声明相同的类型。
消息收发注释不需要poller
属性作为@Poller
了。
有关更多信息,请参阅 Annotation Support 。
为方便起见,用于 Scatter-Gather 的 XML 和 Java DSL 基于RecipientListRouter
,现在将applySequence = true
,因此 gatherer 部分可以依赖默认的关联策略。
有关更多信息,请参阅 Scatter-Gather 。
对AbstractMappingMessageRouter
.
现在,设置defaultOutputChannel
还会重置channelKeyFallback
property 设置为false
,因此不会尝试从其 key 解析通道,但逻辑会立即回退到将消息发送到defaultOutputChannel
.
有关详细信息,请参阅路由器选项。
这AggregatingMessageHandler
现在不会拆分Collection<Message<?>>
的结果MessageGroupProcessor
(除非它是SimpleMessageGroupProcessor
) 的 Package,但会发出一条包含整个集合作为有效负载的消息。
有关更多信息,请参阅 Aggregator。
这IntegrationFlows
factory 现在标记为已弃用,以支持IntegrationFlow
接口本身。
Factory 类将在将来的发行版中删除。
有关更多信息,请参阅 Java DSL。
这org.springframework.util.concurrent.ListenableFuture
从 Spring Framework 开始已弃用6.0
.
所有 Spring 集成异步 API 都已迁移到CompletableFuture
.
Messaging Gateway 接口方法现在可以返回Future<Void>
和Mono<Void>
正确异步执行下游流。
旁边带有@MessagingGateway
annotation 接口也可以用@Primary
.
@MessagingGateway
接口现在可以用作@Import
用于配置的资源。
网关代理 bean 的默认命名策略可以通过@IntegrationComponentScan.nameGenerator()
属性。
如果AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR
bean 存在,则在回退到AnnotationBeanNameGenerator
.
有关更多信息,请参阅 Messaging Gateway。
这integrationGlobalProperties
Bean 现在由框架声明为org.springframework.integration.context.IntegrationProperties
而不是之前弃用的java.util.Properties
.
生成集合作为回复的消息处理程序(例如JpaOutboundGateway
,JdbcOutboundGateway
和其他基于数据库的网关)现在,如果查询未返回任何记录,则返回空结果列表。
以前null
返回结束流或引发异常,具体取决于requiresReply
.
RMI 删除
这spring-integration-rmi
module 在以前的版本中被弃用后已被完全删除。
没有替代品:建议迁移到更安全的网络和应用程序协议,例如 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 Lock Registry。
TCP/IP 更改
这lookupHost
属性的AbstractConnectionFactory
和DatagramPacketMessageMapper
现在设置为false
以避免在未配置 DNS 的环境中出现延迟。
有关更多信息,请参阅 TCP 和 UDP 支持。
JMS 更改
这JmsOutboundGateway
现在创建一个TemporaryTopic
而不是TemporaryQueue
如果replyPubSubDomain
option 设置为true
.
有关更多信息,请参阅 JMS 支持。
安全性更改
这ChannelSecurityInterceptor
及其注释@SecuredChannel
和 XML<secured-channels>
配置已被弃用,取而代之的是AuthorizationChannelInterceptor
.
有关更多信息,请参阅安全支持。
新组件
文件聚合器
一个FileSplitter.FileMaker
-based 实现CorrelationStrategy
,ReleaseStrategy
和MessageGroupProcessor
作为FileAggregator
组件。
有关更多信息,请参阅 File Aggregator 。
MQTT v5 支持
这Mqttv5PahoMessageDrivenChannelAdapter
和Mqttv5PahoMessageHandler
(包括各自的MqttHeaderMapper
) 的 API 协议的调用,以支持 MQTT v5 协议通信。
有关更多信息,请参阅 MQTT v5 支持。
一般更改
所有持久的MessageGroupStore
implementation 提供了一个streamMessagesForGroup(Object groupId)
Contract 的 Contract。
有关更多信息,请参阅 Message Store 。
这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
as 跳过调用源。
稍后可以将其更改为不同的值,例如通过 Control Bus。
有关更多信息,请参阅轮询使用者。
这ConsumerEndpointFactoryBean
现在接受reactiveCustomizer
Function
作为响应式流源添加到任何输入通道,并使用ReactiveStreamsConsumer
下面。
这被涵盖为ConsumerEndpointSpec.reactive()
选项,并作为 Java DSL 中的@Reactive
消息注释的嵌套注释。
有关更多信息,请参阅 Reactive Streams Support 。
这groupTimeoutExpression
对于关联消息处理程序(Aggregator
和Resequencer
) 现在可以计算为java.util.Date
对于一些精细的调度用例。
此外,BiFunction groupConditionSupplier
选项添加到AbstractCorrelatingMessageHandler
要提供MessageGroup
条件。
有关更多信息,请参阅 Aggregator。
这MessageGroup
abstraction 可以通过condition
稍后进行评估,以便为小组做出决定。
有关更多信息,请参阅 Message Group Condition 。
集成流组合
新的IntegrationFlows.from(IntegrationFlow)
添加了 factory 方法以允许启动电流IntegrationFlow
从现有流的输出中。
此外,IntegrationFlowDefinition
已添加to(IntegrationFlow)
terminal 运算符在某个其他流的输入通道处继续电流。
有关更多信息,请参阅 集成流组合 。
AMQP 更改
这AmqpInboundChannelAdapter
和AmqpInboundGateway
(以及相应的 Java DSL 构建器)现在支持org.springframework.amqp.rabbit.retry.MessageRecoverer
作为通用RecoveryCallback
.
有关更多信息,请参阅 AMQP 支持。
Redis 更改
这ReactiveRedisStreamMessageProducer
现在为所有StreamReceiver.StreamReceiverOptionsBuilder
选项,包括onErrorResume
功能。
有关更多信息,请参阅 Redis 支持。
HTTP 更改
这HttpRequestExecutingMessageHandler
不会回退到application/x-java-serialized-object
content 类型,并允许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 支持。
JPA 更改
这JpaOutboundGateway
现在支持Iterable
message payload 的PersistMode.DELETE
.
有关更多信息,请参阅 Outbound Channel Adapter 。
网关更改
以前,在使用 XML 配置时,@Gateway.payloadExpression
对于无参数方法被忽略。
有一个可能的中断性变更 - 如果方法被注释为@Payload
以及@Gateway
(使用不同的表达式)以前,@Payload
将应用,现在@Gateway.payloadExpression
。
有关更多信息,请参阅使用注释和 XML 的网关配置和调用无参数方法。
新组件
Apache Kafka 的通道适配器
独立的 Spring Integration for Apache Kafka 项目已合并为spring-integration-kafka
module 添加到此项目中。
这KafkaProducerMessageHandler
sendTimeoutExpression
default 已更改。
您现在可以访问Future<?>
对于底层证券send()
操作。
有关更多信息,请参阅 Spring for Apache Kafka 支持。
R2DBC 通道适配器
引入了用于 R2DBC 数据库交互的 Channel Adapters。 有关更多信息,请参阅 R2DBC 支持。
Redis 流支持
引入了 Channel Adapters for Redis Stream 支持。 有关更多信息,请参阅 Redis Stream Outbound Channel Adapter。
可更新锁注册表
引入了 Renewable lock registry,以允许续订分布式锁的租约。 有关更多信息,请参阅 JDBC 实现。
ZeroMQ 支持
ZeroMqChannel
,ZeroMqMessageHandler
和ZeroMqMessageProducer
已引入。
有关更多信息,请参阅 ZeroMQ 支持。
一般更改
单向消息传递网关 (void
method 返回类型)现在将nullChannel
显式地放入replyChannel
标头以忽略任何可能的下游回复。
有关更多信息,请参阅设置默认回复通道。
此外,网关方法调用程序 (GatewayProxyFactoryBean.MethodInvocationGateway
) 现在提供托管 Bean 名称作为网关代理 Bean 名称加方法签名的组合。
例如:sampleGateway#echo(String)
.
这会影响为网关方法调用公开的消息历史记录和指标,并在应用程序上下文的启动和关闭期间提供精细的日志。
聚合器(和重新排序器)现在可以使孤立组(持久存储中的组,在应用程序重新启动后没有新消息到达)过期。 有关更多信息,请参阅 Aggregator Expiring Groups 。
已删除由 Micrometer meter 替换的旧指标。
Thread Barrier 现在有两个单独的超时选项:requestTimeout
和triggerTimeout
.
TCP/UDP 更改
连接工厂现在支持多个发送组件 (TcpSender
);它们仍然仅限于一个接收组件 (TcpListener
).
例如,这允许入站网关和出站通道适配器共享同一个工厂,同时支持请求/回复和从服务器到 Client 端的任意消息传递。
共享工厂不应与出站网关一起使用,除非一次性连接或ThreadAffinityClientConnectionFactory
正在使用。
有关更多信息,请参阅 Collaborative Channel Adapters and TCP Gateways。
UDP 通道适配器现在可以使用SocketCustomizer
它允许设置适配器不直接支持的套接字属性。
有关更多信息,请参阅 UDP 适配器。
AMQP 更改
出站终端节点现在具有处理发布者确认和返回的新机制。 有关更多信息,请参阅 Publisher Confirms and Returns 的替代机制。
新的BatchMode.EXTRACT_PAYLOAD_WITH_HEADERS
受AmqpInboundChannelAdapter
.
有关更多信息,请参阅 入站通道适配器 。
邮件更改
这AbstractMailReceiver
现在可以生成MimeMessage
按原样,而无需急切地获取其内容。
有关更多信息,请参阅 Mail-receiving Channel Adapter 。
新组件
集成模式
这IntegrationPattern
引入了抽象来指示哪种企业集成模式(IntegrationPatternType
) 和 Spring 集成组件所属的类别。
有关此抽象及其用例的更多信息,请参阅其 JavaDocs 和 Integration Graph。
ReactiveMessageHandler
这ReactiveMessageHandler
现在在框架中原生支持。
有关更多信息,请参见 ReactiveMessageHandler。
ReactiveMessageSourceProducer
这ReactiveMessageSourceProducer
是MessageProducerSupport
包装提供的MessageSource
转换为Flux
按需receive()
调用。
有关更多信息,请参阅 Reactive Streams Support 。
Java DSL 扩展
新的IntegrationFlowExtension
引入了 API,以允许使用自定义或组合的 EIP 运算符扩展现有 Java DSL。
这还可用于为任何现成的定制器IntegrationComponentSpec
扩展。
有关更多信息,请参阅 DSL 扩展。
Kotlin DSL
引入了用于集成流配置的 Kotlin DSL。 有关更多信息,请参阅 Kotlin DSL 章节。
ReactiveRequestHandler建议
一个ReactiveRequestHandlerAdvice
提供自定义Mono
来自消息处理程序的回复。
有关更多信息,请参见 Reactive Advice。
HandleMessageAdviceAdapter
一个HandleMessageAdviceAdapter
用于包装任何MethodInterceptor
申请MessageHandler.handleMessage()
而不是默认的AbstractReplyProducingMessageHandler.RequestHandler.handleRequestMessage()
行为。
有关更多信息,请参阅 Handling Message Advice。
MongoDB 反应式通道适配器
这spring-integration-mongodb
模块现在为 Spring Data 中的反应式 MongoDb 驱动程序支持提供通道适配器实现。
此外,MongoDb 更改流支持的反应式实现与MongoDbChangeStreamMessageProducer
.
有关更多信息,请参阅 MongoDB 支持。
接收消息建议
一个特别的ReceiveMessageAdvice
已引入 Proxy exactlyMessageSource.receive()
或PollableChannel.receive()
.
有关更多信息,请参阅智能轮询。
一般更改
网关代理现在不代理default
方法。
看调用default
方法了解更多信息。
内部组件(如_org.springframework.integration.errorLogger
) 现在在集成图中表示时具有缩短的名称。
有关更多信息,请参阅 Integration Graph。
在聚合器中,当MessageGroupProcessor
返回Message
这MessageBuilder.popSequenceDetails()
如果sequenceDetails
匹配组第一条消息中的标头。
有关更多信息,请参阅 Aggregator Programming Model 。
新的publishSubscribeChannel()
运算符,基于BroadcastCapableChannel
和BroadcastPublishSubscribeSpec
已添加到 Java DSL 中。
当我们将子流配置为代理支持的通道的发布-订阅订阅者时,这种 Fluent API 具有其优势,例如SubscribableJmsChannel
,SubscribableRedisChannel
等。
有关更多信息,请参阅子流支持。
Spring Integration 中的事务支持现在还包括配置ReactiveTransactionManager
如果MessageSource
或MessageHandler
implementation 会生成一个 Reactive 类型供 payload 发送。
看TransactionInterceptorBuilder
了解更多信息。
另请参见 Reactive Transactions。
新的intercept()
作员注册ChannelInterceptor
没有创建显式通道的实例被添加到 Java DSL 中。
有关更多信息,请参见 Operator intercept() 。
这MessageStoreSelector
具有比较新旧值的新机制。
有关详细信息,请参阅 Idempotent Receiver Enterprise Integration Pattern。
这MessageProducerSupport
基类现在具有subscribeToPublisher(Publisher<? extends Message<?>>)
允许实现消息驱动的生产者端点的 API,这些端点通过反应式Publisher
.
有关更多信息,请参阅 Reactive Streams Support 。
AMQP 更改
出站通道适配器具有一个新属性multiSend
允许在一条消息的范围内发送多条消息RabbitTemplate
调用。
有关更多信息,请参阅 AMQP 出站通道适配器。
入站通道适配器现在支持具有consumerBatchEnabled
属性设置为true
.
请参阅 AMQP 入站通道适配器
HTTP 更改
这encodeUri
属性AbstractHttpRequestExecutingMessageHandler
已被弃用,取而代之的是新引入的encodingMode
.
看DefaultUriBuilderFactory.EncodingMode
JavaDocs 和控制 URI 编码了解更多信息。
这也会影响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 支持。
Rate Limit Advice 支持
这RateLimiterRequestHandlerAdvice
现在可用于限制处理程序的请求速率。
有关更多信息,请参阅 Rate Limiter Advice 。
Caching Advice 支持
这CacheRequestHandlerAdvice
现在可用于在处理程序上缓存请求结果。
有关更多信息,请参见 Caching Advice 。
Kotlin 脚本支持
JSR223 脚本模块现在包含对 Kotlin 脚本的支持。 有关更多信息,请参阅脚本支持。
Flux 聚合器支持
这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
configuration 选项。
有关更多信息,请参阅 Splitter 。
Control Bus 现在可以处理Pausable
(扩展Lifecycle
)作。
请参阅 Control Bus 了解更多信息。
这Function<MessageGroup, Map<String, Object>>
为 Aggregator 组件引入了策略,以合并和计算输出消息的标头。
有关更多信息,请参阅 Aggregator Programming Model 。
所有MessageHandlingException
现在包括一个 Bean 资源和源,用于在不涉及最终用户代码的情况下回溯配置部分。
有关更多信息,请参阅错误处理。
为了获得更好的最终用户体验,Java DSL 现在提供了一个 configurer 变体,用于使用网关接口启动流。
看IntegrationFlows.from(Class<?> serviceInterface, Consumer<GatewayProxySpec> endpointConfigurer)
JavaDocs 了解更多信息。
也是一个MethodArgsHolder
现在是GatewayProxyFactoryBean
.
这#args
和#method
评估上下文变量现已弃用。
有关更多信息,请参阅 Messaging Gateway。
AMQP 更改
现在可以将出站终端节点配置为在超时内未收到发布者确认时合成 “nack”。 有关更多信息,请参阅 Outbound Channel Adapter 。
入站通道适配器现在可以将批量消息作为List<?>
payload 的 Payload 中执行,而不是接收每个批处理 Fragment 的离散消息。
有关更多信息,请参阅 Batched Messages 。
现在可以将出站通道适配器配置为阻塞调用线程,直到收到发布者确认(确认)。 有关更多信息,请参阅 Outbound Channel Adapter 。
文件更改
对筛选远程文件进行了一些改进。 有关更多信息,请参阅 Remote Persistent File List Filters 。
TCP 更改
该ByteArrayLengthHeaderSerializer
现在,除了有效负载之外,还可以包含标头的长度。
有关更多信息,请参见Message Demarcation (Serializers and Deserializers)。
当使用TcpNioServerConnectionFactory
,现在优先接受新连接而不是从现有连接中读取,但它是可配置的。
有关更多信息,请参阅关于非阻塞 I/O (NIO)。
出站网关具有新属性closeStreamAfterSend
;当与每个请求/回复的新连接一起使用时,它会向服务器发出 EOF 信号,而不会关闭连接。
这对于使用 EOF 来表示消息结束而不是数据中的某个分隔符的服务器非常有用。
有关更多信息,请参阅 TCP 网关。
客户端连接工厂现在支持connectTimeout
这会导致在该时间内未建立连接时引发异常。
有关更多信息,请参阅 TCP 连接工厂。
SoftEndOfStreamException
现在是RuntimeException
而不是扩展IOException
.
邮件更改
这AbstractMailReceiver
现在有一个autoCloseFolder
选项 (true
默认情况下),以禁用在获取后自动关闭文件夹,但填充IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE
标头,而不是用于下游交互。
有关更多信息,请参阅 Mail-receiving Channel Adapter 。
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
conditional annotation 来检查RUN_LONG_INTEGRATION_TESTS
entry 的值为true
以确定是应该运行还是跳过 TEST。
请参阅 JUnit 规则和条件。
一般更改
版本 5.1 中进行了以下更改:
Java DSL
这IntegrationFlowContext
现在是一个接口,而IntegrationFlowRegistration
是IntegrationFlowContext
.
新的logAndReply()
为方便起见,当您希望在请求-回复配置的流结束时进行记录时,引入了运算符。
这避免了与log()
将其视为单向端流分量。
为任何NamedComponent
在集成流程中,现在基于组件类型,以便从可视化工具、日志分析器和指标收集器中获得更好的可读性。
这GenericHandler.handle()
现在除了MessageHeaders
type 作为第二个参数。
Dispatcher 异常
捕获并重新引发的异常AbstractDispatcher
现在更加一致:
-
一个
MessagingException
具有failedMessage
property 将原封不动地重新抛出。 -
所有其他异常都包装在
MessageDeliveryException
使用failedMessage
属性集。
以前:
-
一个
MessagingException
具有failedMessage
property 被原封不动地重新抛出 -
一个
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
.
有关更多信息,请参阅Working With Message Flows。
Aggregator 更改
如果groupTimeout
的计算结果为负值,则聚合器现在会立即使组过期。
只null
被视为对当前消息不执行任何作的信号。
新的popSequence
属性以允许(默认情况下)调用MessageBuilder.popSequenceDetails()
对于输出消息。
此外,还有一个AbstractAggregatingMessageGroupProcessor
现在返回一个AbstractIntegrationMessageBuilder
而不是整个Message
进行优化。
有关更多信息,请参阅 Aggregator。
@Publisher 注释更改
从版本 5.1 开始,您必须显式打开@Publisher
AOP 功能@EnablePublisher
或使用<int:enable-publisher>
子元素<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 Message Headers 底部附近的注释。
这contentType
Header 现在已正确映射为 General Headers 映射中的一个条目。
有关更多信息,请参阅 contentType Header 。
从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载为ManualAckListenerExecutionFailedException
与额外的channel
和deliveryTag
性能。
这使得错误流能够确认/nack 原始消息。
有关更多信息,请参阅 入站消息转换 。
JDBC 更改
一个令人困惑的max-rows-per-poll
JDBC 入站通道适配器和 JDBC 出站网关上的属性已被弃用,取而代之的是新引入的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
从缓存中签出现有会话时。
有关更多信息,请参阅 SFTP 会话缓存和 FTP 会话缓存。
Twitter 支持
由于 Spring Social 项目已进入生命周期结束状态,因此 Spring Integration 中的 Twitter 支持已移至 Extensions 项目。 有关更多信息,请参见 Spring Integration Social Twitter。
JMS 支持
这JmsSendingMessageHandler
现在提供deliveryModeExpression
和timeToLiveExpression
选项来确定 JMS 消息在运行时发送的相应 QoS 选项。
这DefaultJmsHeaderMapper
现在允许映射入站JMSDeliveryMode
和JMSExpiration
properties (属性)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"
.
千分尺支持更改
现在,自定义框架创建的标准 Micrometer meter 变得更加简单。 有关更多信息,请参阅 Micrometer 集成。
集成图定制
现在可以向IntegrationNode
S 通过Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback
在IntegrationGraphServer
.
有关更多信息,请参阅 Integration Graph。
集成全局属性
现在,当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 集成测试框架来帮助测试 Spring 集成应用程序。
现在,使用@SpringIntegrationTest
注解和MockIntegration
工厂,您可以使集成流的 JUnit 测试更加容易。
有关更多信息,请参阅测试支持。
内容类型转换
现在,我们使用了新的InvocableHandlerMethod
的基础设施,我们可以执行contentType
从 payload 到 Target 方法参数的转换。
有关更多信息,请参阅 内容类型转换 。
ErrorMessagePublisher
和ErrorMessageStrategy
我们添加了ErrorMessagePublisher
和ErrorMessageStrategy
用于创建ErrorMessage
实例。
有关更多信息,请参阅错误处理。
一般更改
Spring 集成现在完全基于 Spring 框架5.0
和 Project Reactor3.1
.
以前的 Project Reactor 版本不再受支持。
核心变更
这@Poller
注解现在具有errorChannel
属性,以便更轻松地配置底层MessagePublishingErrorHandler
.
有关更多信息,请参阅 Annotation Support 。
所有请求-回复终端节点(基于AbstractReplyProducingMessageHandler
) 现在可以启动事务,因此,使整个下游流成为事务性的。
有关更多信息,请参阅 Transaction Support 。
这SmartLifecycleRoleController
现在提供获取角色中终端节点状态的方法。
有关更多信息,请参阅终端节点角色。
默认情况下,POJO 方法现在通过使用InvocableHandlerMethod
,但您可以像以前一样将它们配置为使用 SPEL。
有关更多信息,请参阅 POJO 方法调用。
当将 POJO 方法作为消息处理程序时,您现在可以使用@Default
注解为不匹配的条件提供回退机制。
有关更多信息,请参阅配置 Service Activator。
我们添加了一个简单的PassThroughTransactionSynchronizationFactory
始终将轮询的消息存储在当前事务上下文中。
该消息用作failedMessage
属性的MessagingException
,它包装事务完成期间引发的任何原始异常。
有关更多信息,请参阅 事务同步 。
基于聚合器表达式的ReleaseStrategy
现在,根据MessageGroup
而不仅仅是Message<?>
.
有关更多信息,请参见聚合器和 Spring 表达式语言 (SpEL)。
您现在可以提供ObjectToMapTransformer
使用自定义的JsonObjectMapper
.
有关更多信息,请参见聚合器和 Spring 表达式语言 (SpEL)。
这@GlobalChannelInterceptor
annotation 和<int:channel-interceptor>
现在支持负向模式(通过!
prepending) 进行组件名称匹配。
有关更多信息,请参见 Global Channel Interceptor Configuration 。
当候选者无法获取锁时,LockRegistryLeaderInitiator
现在会发出一个新的OnFailedToAcquireMutexEvent
通过DefaultLeaderEventPublisher
.
看Leadership Event Handling
了解更多信息。
网关更改
当网关方法具有void
return 类型并提供 error 通道,则网关现在可以正确设置errorChannel
页眉。
以前,标题未填充。
这会导致同步下游流(在调用线程上运行)将异常发送到配置的通道,但异步下游流上的异常将发送到默认errorChannel
相反。
这RequestReplyExchanger
interface 现在有一个throws MessagingException
子句来满足提议的消息交换协定。
现在,您可以使用 SPEL 表达式指定请求和回复超时。 有关更多信息,请参阅 Messaging Gateway。
聚合器性能更改
默认情况下,聚合商现在使用SimpleSequenceSizeReleaseStrategy
,这样效率更高,尤其是对于大型组。
现在,空组计划在以下时间后删除empty-group-min-timeout
.
有关更多信息,请参阅 Aggregator。
Splitter 更改
splitter 组件现在可以处理和拆分 JavaStream
和 Reactive StreamsPublisher
对象。
如果输出通道是ReactiveStreamsSubscribableChannel
这AbstractMessageSplitter
构建一个Flux
进行后续迭代,而不是常规的Iterator
,与正在拆分的对象无关。
另外AbstractMessageSplitter
提供protected obtainSizeIfPossible()
方法来确定Iterable
和Iterator
对象。
有关更多信息,请参阅 Splitter 。
JMS 更改
以前,Spring 集成 JMS XML 配置使用默认的 Bean 名称connectionFactory
对于 JMS 连接工厂,允许从组件定义中省略该属性。
我们将其重命名为jmsConnectionFactory
,这是 Spring Boot 用于自动配置 JMS 连接工厂 Bean 的 Bean 名称。
如果您的应用程序依赖于以前的行为,则可以重命名connectionFactory
bean 设置为jmsConnectionFactory
或者通过使用 Bean 的当前名称专门配置您的组件以使用 Bean。
有关更多信息,请参阅 JMS 支持。
邮件更改
呈现 IMAP 邮件内容时的一些不一致问题已得到解决。 有关更多信息,请参阅“邮件接收通道适配器”部分中的注释。
Feed 更改
而不是com.rometools.fetcher.FeedFetcher
,它在 ROME 中已弃用,我们引入了一个新的Resource
属性的FeedEntryMessageSource
.
有关更多信息,请参阅 Feed Adapter。
文件更改
我们引入了新的FileHeaders.RELATIVE_PATH
表示相对路径的 message headerFileReadingMessageSource
.
尾部适配器现在支持idleEventInterval
在该时间段内文件中没有数据时发出事件。
flush 的FileWritingMessageHandler
现在有一个额外的参数。
文件出站通道适配器和网关 (FileWritingMessageHandler
) 现在支持REPLACE_IF_MODIFIED
FileExistsMode
.
它们现在还支持对新写入的文件设置文件权限。
新的FileSystemMarkerFilePresentFileListFilter
现已推出。
有关更多信息,请参阅处理不完整的数据。
这FileSplitter
现在提供了一个firstLineAsHeader
选项将第一行内容作为标头包含在为其余行发出的消息中。
有关更多信息,请参阅文件支持。
FTP 和 SFTP 更改
入站通道适配器现在具有一个名为max-fetch-size
,用于限制在本地目录中当前没有文件时轮询期间提取的文件数。
默认情况下,它们还配置了FileSystemPersistentAcceptOnceFileListFilter
在local-filter
.
您还可以提供自定义DirectoryScanner
通过设置新引入的scanner
属性。
您现在可以将 regex 和 pattern 过滤器配置为始终传递目录。 当您在出站网关中使用递归时,这可能很有用。
默认情况下,所有入站通道适配器(基于流和同步)现在都使用适当的AbstractPersistentAcceptOnceFileListFilter
实现以防止重复下载远程文件。
FTP 和 SFTP 出站网关现在支持REPLACE_IF_MODIFIED
FileExistsMode
在获取远程文件时。
FTP 和 SFTP 流入站通道适配器现在在消息头中添加远程文件信息。
FTP 和 SFTP 出站通道适配器(以及PUT
命令)现在支持InputStream
如payload
太。
我们添加了NLST
命令添加到AbstractRemoteFileOutboundGateway
执行 list files names remote 命令。
您现在可以提供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
让它用于 “管道” stdin 并在管道关闭时发布应用程序事件。
有关更多信息,请参阅从 Streams 中读取。
屏障变化
这BarrierMessageHandler
现在支持将延迟到达的 Trigger 消息发送到的 discard 通道。
有关更多信息,请参见 Thread Barrier。
AMQP 更改
AMQP 出站终端节点现在支持在使用 RabbitMQ 延迟消息交换插件时设置延迟表达式。
入站端点现在支持 Spring AMQPDirectMessageListenerContainer
.
可轮询的 AMQP 支持的通道现在阻止 Poller 配置的 Poller 线程receiveTimeout
(默认值:1 秒)。
标头(如contentType
,现在在最终消息中使用。
以前,它取决于转换器类型,即哪些 Headers 和 Message 属性出现在最终消息中。
要覆盖转换器设置的标头,请将headersMappedLast
property 设置为true
.
有关更多信息,请参阅 AMQP 支持。
HTTP 更改
默认情况下,DefaultHttpHeaderMapper.userDefinedHeaderPrefix
property 现在为空字符串,而不是X-
.
有关更多信息,请参阅 HTTP 标头映射。
默认情况下,uriVariablesExpression
现在使用SimpleEvaluationContext
(自 5.0.4 起)。
有关更多信息,请参阅映射 URI 变量。
MQTT 变更
入站消息现在使用RECEIVED_TOPIC
,RECEIVED_QOS
和RECEIVED_RETAINED
标头,以避免在应用程序中继消息时无意中传播到出站消息。
出站通道适配器现在支持 topic、qos 和 retained 属性的表达式。 默认值保持不变。 有关更多信息,请参阅 MQTT 支持。
STOMP 更改
我们将 STOMP 模块更改为使用ReactorNettyTcpStompClient
基于 Project Reactor3.1
和reactor-netty
外延。
我们将Reactor2TcpStompSessionManager
自ReactorNettyTcpStompSessionManager
,根据ReactorNettyTcpStompClient
基础。
有关更多信息,请参阅 STOMP 支持。
Web 服务更改
您现在可以供应WebServiceOutboundGateway
具有外部配置的实例WebServiceTemplate
实例。
DefaultSoapHeaderMapper
现在可以映射javax.xml.transform.Source
用户定义的标头添加到 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
标头来指示消息的来源 (topic 或 pattern)。
有关更多信息,请参阅 Redis 支持。
TCP 更改
我们添加了一个新的ThreadAffinityClientConnectionFactory
将 TCP 连接绑定到线程。
您现在可以配置 TCP 连接工厂以支持PushbackInputStream
实例,让反序列化器在 “提前读取” 之后 “未读” (推回) 字节。
我们添加了一个ByteArrayElasticRawDeserializer
没有maxMessageSize
以根据需要控制和缓冲传入数据。
有关更多信息,请参阅 TCP 和 UDP 支持。
JDBC 更改
这JdbcMessageChannelStore
现在为ChannelMessageStorePreparedStatementSetter
,允许您在 Store 中自定义消息插入。
这ExpressionEvaluatingSqlParameterSourceFactory
现在为sqlParameterTypes
,允许您自定义参数的 SQL 类型。
有关更多信息,请参阅 JDBC 支持。
指标更改
现在支持千分尺应用程序监控(自版本 5.0.2 起)。 有关更多信息,请参阅 Micrometer 集成。
对 Micrometer 进行了更改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
实现。
有关更多信息,请参阅 Message Store 。
PersistentMessageGroup
我们添加了PersistentMessageGroup
(lazy-load proxy) 实现MessageGroupStore
实例
返回getMessageGroup()
当他们的lazyLoadMessageGroups
是true
(默认值)。
有关更多信息,请参阅 Message Store 。
FTP 和 SFTP 流入站通道适配器
我们添加了入站通道适配器,这些适配器返回InputStream
,允许您检索远程文件,而无需将其写入本地文件系统。
有关更多信息,请参阅 FTP 流入站通道适配器 和 SFTP 流入站通道适配器。
StreamTransformer
我们添加了StreamTransformer
要将InputStream
payload 复制到byte[]
或String
.
有关更多信息,请参阅 Stream Transformer 。
集成图
我们添加了IntegrationGraphServer
与IntegrationGraphController
REST 服务,将 Spring Integration 应用程序的运行时模型公开为图形。
有关更多信息,请参阅 Integration Graph。
JDBC Lock Registry
我们添加了JdbcLockRegistry
对于通过数据库表共享的分布式锁。
有关更多信息,请参阅 JDBC Lock Registry。
LeaderInitiator
为LockRegistry
我们添加了LeaderInitiator
基于LockRegistry
策略。
有关更多信息,请参阅 领导事件处理 。
一般更改
本节描述了版本 4.3 为 Spring 集成带来的一般更改。
核心变更
本节描述了对 Spring 集成核心的一般更改。
链中的出站网关
以前,您可以指定reply-channel
在链内的出站网关上。
它完全被忽视了。
gateway 的回复将转到下一个 chain element,或者,如果 gateway 是最后一个 element,则返回到 chain 的 output channel。
现在,系统会检测并禁止此情况。
如果您有这样的配置,请删除reply-channel
.
异步服务激活器
我们添加了一个选项,使服务激活器同步。 有关更多信息,请参阅 Asynchronous Service Activator 。
邮件更改
本节描述了对 Spring 集成邮件功能的一般更改。
可自定义的用户标志
可定制的userFlag
(在 4.2.2 中添加,以提供用于表示邮件已
seen) 现在在 XML 命名空间中可用。
看在以下情况下标记 IMAP 邮件\Recent
不支持了解更多信息。
邮件消息映射
现在,您可以使用MessageHeaders
包含邮件标头和包含电子邮件内容的有效负载。
以前,有效负载始终是原始的MimeMessage
.
有关更多信息,请参阅入站邮件映射。
JMS 更改
本节描述了对 Spring 集成 JMS 功能的一般更改。
标头映射器
这DefaultJmsHeaderMapper
现在映射标准correlationId
header 作为 Message 属性,方法是调用其toString()
方法。
有关更多信息,请参见Mapping Message Headers to and from JMS Message。
异步网关
JMS 出站网关现在有一个async
财产。
有关更多信息,请参阅异步网关。
Aggregator 更改
当 POJO 聚合器发布Message<?>
对象。
这种情况很少见,但是,如果您的应用程序这样做,则需要对 POJO 进行少量更改。
查看此内容重要说明:SimpleMessageGroup.getMessages()
method 返回一个unmodifiableCollection
.注意以了解更多信息。
TCP/UDP 更改
本节描述了对 Spring 集成 TCP/UDP 功能的一般更改。
事件
新的TcpConnectionServerListeningEvent
在启动 Server Connection Factory 时发出。
有关更多信息,请参阅 TCP 连接事件。
您现在可以使用destination-expression
和socket-expression
attributes 开启<int-ip:udp-outbound-channel-adapter>
.
有关更多信息,请参阅 UDP 适配器。
流反序列化器
在组装整个消息之前无法分配最终缓冲区的各种反序列化器现在支持池化接收数据的原始缓冲区,而不是为每个消息创建和丢弃缓冲区。 有关更多信息,请参阅 TCP 连接工厂。
TCP 消息映射器
消息映射器现在可以选择设置配置的内容类型标头。 有关更多信息,请参阅 IP 消息报头。
文件更改
本节描述了对 Spring 集成文件功能的一般更改。
目标目录创建
为FileWritingMessageHandler
可以表示一个子路径,用于在目标目录中保存文件的所需目录结构。
有关更多信息,请参阅生成文件名。
这FileReadingMessageSource
现在隐藏了WatchService
目录扫描逻辑。
我们添加了use-watch-service
和watch-events
选项来启用此行为。
我们弃用了顶级WatchServiceDirectoryScanner
因为 API 不一致。
看WatchServiceDirectoryScanner
了解更多信息。
追加和刷新
现在,您可以在追加时避免刷新文件,并在空闲期间使用多种策略刷新数据。
看使用 时刷新文件APPEND_NO_FLUSH
了解更多信息。
保留时间戳
现在,您可以配置出站通道适配器以设置目标文件的lastmodified
时间戳。
有关更多信息,请参阅 File Timestamps 文件时间戳。
Splitter 更改
这FileSplitter
现在,当文件完全读取时,它会自动关闭 FTP 或 SFTP 会话。
当出站网关返回InputStream
或者当您使用新的 FTP 或 SFTP 流媒体频道适配器时。
我们还引入了一个新的markers-json
转换选项FileSplitter.FileMarker
转换为 JSONString
轻松的下游网络交互。
有关更多信息,请参阅 File Splitter 。
文件过滤器
我们添加了ChainFileListFilter
作为CompositeFileListFilter
.
有关更多信息,请参阅读取文件。
AMQP 更改
本节描述了对 Spring 集成 AMQP 功能的一般更改。
内容类型消息转换器
出站终端节点现在支持RabbitTemplate
配置了ContentTypeDelegatingMessageConverter
这样
,您可以根据 Message 内容类型选择转换器。
有关更多信息,请参阅 出站消息转换。
延迟消息处理的标头
Spring AMQP 1.6 增加了对延迟消息交换的支持。
标头映射现在支持标头 (amqp_delay
和amqp_receivedDelay
) 中。
AMQP 支持的通道
AMQP 支持的通道现在支持消息映射。 有关更多信息,请参见 AMQP 支持的消息通道。
Redis 更改
本节描述了 Spring Integration Redis 功能的一般更改。
List Push/Pop Direction
以前,队列通道适配器总是在固定方向上使用 Redis 列表,推送到左端并从右端读取。
现在,您可以使用rightPop
和leftPush
选项RedisQueueMessageDrivenEndpoint
和RedisQueueOutboundChannelAdapter
分别。
有关更多信息,请参阅 Redis Queue Inbound Channel Adapter 和 Redis Queue Outbound Channel Adapter。
队列入站网关默认序列化程序
入站网关中的默认序列化程序已更改为JdkSerializationRedisSerializer
以实现与出站网关的兼容性。
有关更多信息,请参阅 Redis 队列入站网关。
HTTP 更改
以前,对于具有正文(例如POST
),没有content-type
标头,则正文将被忽略。
在此版本中,此类请求的内容类型被视为application/octet-stream
按推荐
由 RFC 2616 提供。
有关更多信息,请参阅 Http 入站组件。
uriVariablesExpression
现在使用SimpleEvaluationContext
默认情况下(自 4.3.15 起)。
有关更多信息,请参阅映射 URI 变量。
SFTP 更改
本节描述了对 Spring 集成 SFTP 功能的一般更改。
chmod
变化
SFTP 出站网关(用于put
和mput
命令),并且 SFTP 出站通道适配器现在支持chmod
属性以在上传后更改远程文件权限。
看SFTP Outbound Channel Adapter
和SFTP Outbound Gateway
了解更多信息。
FTP 更改
本节描述了对 Spring 集成 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
默认情况下,不再映射 header。
有关更多信息,请参阅 AMQP 消息标头。
Groovy 脚本
现在,您可以使用compile-static
提示或任何其他CompilerConfiguration
选项。
有关更多信息,请参阅 Groovy 配置。
@InboundChannelAdapter
变化
这@InboundChannelAdapter
现在有一个别名channel
属性value
.
此外,目标SourcePollingChannelAdapter
组件现在可以解析目标outputChannel
bean 从其提供的名称 (outputChannelName
options) 中。
有关更多信息,请参阅 Annotation Support 。
XMPP 更改
XMPP 通道适配器现在支持 XMPP 扩展 (XEP)。 有关更多信息,请参阅 XMPP 扩展 。
WireTap 延迟绑定
这WireTap
ChannelInterceptor
现在可以接受channelName
解析为目标MessageChannel
稍后,在第一次主动拦截器作期间。
有关详细信息,请参见 Wire Tap。
ChannelMessageStoreQueryProvider
变化
这ChannelMessageStoreQueryProvider
现在支持 H2 数据库。
有关更多信息,请参阅 Backing Message Channels。
WebSocket 更改
这ServerWebSocketContainer
现在公开了一个allowedOrigins
选项和SockJsServiceOptions
暴露一个suppressCors
选择。
有关更多信息,请参阅 WebSockets 支持。
4.1 和 4.2 之间的更改
新组件
版本 4.2 添加了许多新组件。
主要管理/JMX 返工
我们添加了一个新的MetricsFactory
strategy 界面。
此更改以及 JMX 和管理基础结构中的其他更改,提供了对管理配置和运行时性能的更多控制。
但是,这对 (某些) 用户环境有一些重要影响。
MongoDB 元数据存储
这MongoDbMetadataStore
现已推出。
有关更多信息,请参阅 MongoDB 元数据存储。
SecuredChannel 注解
我们引入了@SecuredChannel
注解,替换已弃用的ChannelSecurityInterceptorFactoryBean
.
有关更多信息,请参阅 Spring Integration 中的安全性。
SecurityContext
增殖
我们引入了SecurityContextPropagationChannelInterceptor
对于SecurityContext
从一个消息流的线程传播到另一个消息流的线程。
有关更多信息,请参阅 Spring Integration 中的安全性。
FileSplitter 文件拆分器
在 4.1.2 中,我们添加了FileSplitter
,它将文本文件拆分为多行。
现在,它在int-file:
Namespace。
有关更多信息,请参阅 File Splitter 。
Zookeeper 支持
我们向框架添加了 Zookeeper 支持,以便在集群或多主机环境中运行时提供帮助。 此更改会影响以下功能:
-
ZookeeperMetadataStore
-
ZookeeperLockRegistry
-
Zookeeper 领导层
有关更多信息,请参阅 Zookeeper 支持。
线程屏障
新线程<int:barrier/>
组件可用,让线程暂停,直到发生某些异步事件。
有关更多信息,请参见 Thread Barrier。
STOMP 支持
我们向框架添加了 STOMP 支持作为入站和出站通道适配器对。 有关更多信息,请参阅 STOMP 支持。
Codec
新的Codec
引入了 abstraction 来对对象进行编码和解码byte[]
.
我们添加了一个使用 Kryo 的实现。
我们还添加了基于编解码器的转换器和消息转换器。
有关更多信息,请参阅 编解码器 。
消息 PreparedStatement Setter
新的MessagePreparedStatementSetter
函数接口回调可用于JdbcMessageHandler
(<int-jdbc:outbound-gateway>
和<int-jdbc:outbound-channel-adapter>
) 作为使用SqlParameterSourceFactory
要在PreparedStatement
使用requestMessage
上下文。
有关更多信息,请参阅 Outbound Channel Adapter 。
一般更改
本节介绍从版本 4.1 到版本 4.2 的一般更改。
文件更改
有关这些更改的更多信息,请参阅文件支持。
类套餐更改
我们将ScatterGatherHandler
类org.springframework.integration.handler
到org.springframework.integration.scattergather
.
TCP 更改
本节描述了对 Spring 集成 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 Outbound Gateway Attributes) 了解更多信息。
TCP SSLSession 可用于标头映射
TcpConnection
实施现在支持getSslSession()
允许您从会话中提取信息以添加到 Message Headers。
有关更多信息,请参阅 IP 消息报头。
TCP 事件
现在,每当发生关联异常时(例如,将消息发送到不存在的套接字),都会发布新事件。
这TcpConnectionEventListeningMessageProducer
已弃用。
请改用泛型事件适配器。
有关更多信息,请参阅 TCP 连接事件。
@InboundChannelAdapter
变化
以前,@Poller
在入站通道适配器上,默认使用maxMessagesPerPoll
属性设置为-1
(无穷大)。
这与<inbound-channel-adapter/>
,默认为1
.
注解现在将此属性默认为1
.
API 变更
o.s.integration.util.FunctionIterator
现在需要一个o.s.integration.util.Function
而不是reactor.function.Function
.
这样做是为了消除对 Reactor 的不必要的硬依赖。
此迭代器的任何使用都需要更改导入。
Reactor 仍然支持诸如Promise
网关。
对于不需要依赖项的用户,已删除依赖项。
JMS 更改
本节描述了对 Spring 集成 TCP 功能的一般更改。
Reply 侦听器延迟初始化
您现在可以将 JMS 出站网关中的回复侦听器配置为按需初始化并在空闲期后停止,而不是由网关的生命周期控制。 有关更多信息,请参阅出站网关。
默认确认模式
当使用隐式定义的DefaultMessageListenerContainer
,则默认的acknowledge
现在是transacted
.
我们建议使用transacted
使用此容器时,以避免消息丢失。
此默认值现在适用于消息驱动的入站适配器和入站网关。
它已经是 JMS 支持的通道的默认通道。
有关更多信息,请参阅消息驱动的通道适配器和入站网关。
共享订阅
我们向消息驱动端点添加了对共享订阅 (JMS 2.0) 的命名空间支持,并将<int-jms:publish-subscribe-channel>
.
以前,您必须将侦听器容器连接为<bean/>
声明以使用共享连接。
有关更多信息,请参阅 JMS 支持。
AMQP 更改
本节描述了对 Spring 集成 AMQP 功能的一般更改。
发布者确认
这<int-amqp:outbound-gateway>
现在支持confirm-correlation-expression
,confirm-ack-channel
和confirm-nack-channel
属性(其用途类似于<int-amqp:outbound-channel-adapter>
).
关联数据
对于出站通道适配器和入站网关,如果关联数据是Message<?>
,它将成为 ACK 或 NACK 通道上消息的基础,并添加了额外的 Headers。
以前,任何关联数据(包括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 集成 HTTP 功能的一般更改。
CORS
HTTP 入站终端节点 (<int-http:inbound-channel-adapter>
和<int-http:inbound-gateway>
) 现在允许
跨域资源共享 (CORS) 的配置。
有关更多信息,请参阅跨源资源共享 (CORS) 支持。
入站网关超时
您可以配置 HTTP 入站入口方式,以便在请求超时时返回您指定的状态代码。
默认值为 now500 Internal Server Error
而不是200 OK
.
有关更多信息,请参阅响应状态代码。
表单数据
我们添加了代理文档multipart/form-data
请求。
有关更多信息,请参阅 HTTP 支持。
网关更改
本节描述了对 Spring Integration Gateway 功能的一般更改。
Gateway 方法可以返回CompletableFuture<?>
使用 Java 8 时,网关方法现在可以返回CompletableFuture<?>
.
看CompletableFuture
了解更多信息。
MessagingGateway 注释
请求和回复超时属性现在是String
而不是Long
以允许使用属性占位符或 SPEL 进行配置。
看@MessagingGateway
注解.
Aggregator 更改
本节描述了对 Spring 集成聚合器功能的一般更改。
聚合商性能
此版本包括聚合组件(聚合器、resequencer 等)的一些性能改进,方法是在发布消息时更有效地从组中删除消息。
新方法 (removeMessagesFromGroup
) 已添加到邮件存储中。
将removeBatchSize
属性(默认值:100
) 调整每次作中删除的消息数量。
目前,JDBC、Redis 和 MongoDB 消息存储支持此属性。
输出消息组处理器
当使用ref
或内部 Bean 中,您现在可以直接绑定MessageGroupProcessor
.
此外,我们还添加了一个SimpleMessageGroupProcessor
,这将返回组中的消息集合。
当输出处理器生成Message<?>
,则聚合器会单独释放这些消息。
配置SimpleMessageGroupProcessor
使 Aggregator 成为消息屏障,其中消息被保留,直到它们全部到达,然后单独发布。
有关更多信息,请参阅 Aggregator。
FTP 和 SFTP 更改
本节描述了对 Spring 集成 FTP 和 SFTP 功能的一般更改。
入站通道适配器
您现在可以指定remote-directory-expression
在入站通道适配器上,确定运行时的目录。
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
委派 Session Factory
我们添加了一个委托会话工厂,允许根据某些线程上下文值选择特定的会话工厂。
有关更多信息,请参阅委派 Session Factory 和委派 Session Factory。
默认 sftp 会话工厂
以前,DefaultSftpSessionFactory
无条件允许连接到未知主机。
这现在可以配置(默认:false
).
工厂现在需要一个配置的knownHosts
、文件,除非allowUnknownKeys
property 为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
return 类型。
请参阅 异步网关。
WebSocket 支持
这WebSocket
模块现已推出。
它完全基于 Spring WebSocket 和 Spring 消息传递模块,并提供了一个<inbound-channel-adapter>
以及一个<outbound-channel-adapter>
.
有关更多信息,请参阅 WebSockets 支持。
Scatter-Gather 企业集成模式
我们实施了 scatter-gather 企业集成模式。 有关更多信息,请参阅 Scatter-Gather 。
Routing Slip Pattern
我们添加了路由滑 EIP 模式实现。 有关更多信息,请参阅路由单。
幂等接收器模式
我们添加了幂等接收器企业集成模式实现,方法是将<idempotent-receiver>
组件或IdempotentReceiverInterceptor
和IdempotentReceiver
Java 配置的注释。
有关更多信息,请参阅 Idempotent Receiver Enterprise Integration Pattern 和 Javadoc。
福音JsonObjectMapper
我们添加了 BoonJsonObjectMapper
对于 JSON 转换器。
有关更多信息,请参阅 Transformer 。
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()
.
有关详细信息,请参阅 [WARNING]。
Http 入站通道适配器和状态代码
这<http:inbound-channel-adapter>
现在可以使用status-code-expression
以覆盖默认值200 OK
地位。
有关更多信息,请参阅 HTTP 命名空间支持。
MQTT 适配器更改
您现在可以将 MQTT 通道适配器配置为连接到多个服务器,例如,支持高可用性 (HA)。 有关更多信息,请参阅 MQTT 支持。
MQTT 消息驱动的通道适配器现在支持为每个订阅指定 QoS 设置。 有关更多信息,请参见入站 (消息驱动) 通道适配器。
MQTT 出站通道适配器现在支持异步发送,从而避免在确认交付之前阻塞。 有关更多信息,请参阅 Outbound Channel Adapter 。
现在可以在运行时以编程方式订阅和取消订阅主题。 有关更多信息,请参见入站 (消息驱动) 通道适配器。
FTP 和 SFTP 适配器更改
FTP 和 SFTP 出站通道适配器现在支持附加到远程文件,并在远程文件已存在时执行特定作。
远程文件模板现在也支持此功能,以及rmdir()
和exists()
.
此外,远程文件模板还提供对底层客户端对象的访问,从而允许访问低级 API。
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
Splitter 和 Iterator
Splitter
组件现在支持Iterator
作为生成输出消息的结果对象。
有关更多信息,请参阅 Splitter 。
聚合
Aggregator
instancess 现在支持新属性expire-groups-upon-timeout
.
有关更多信息,请参阅 Aggregator。
内容丰富器改进
我们添加了一个null-result-expression
属性,如果<enricher>
返回null
.
您可以将其添加到<header>
和<property>
.
有关更多信息,请参阅 内容扩充器 。
我们添加了一个error-channel
属性,该属性用于处理错误流,如果Exception
发生在request-channel
.
这样,您就可以返回用于扩充的替代对象。
有关更多信息,请参阅 内容扩充器 。
Header Channel Registry
这<header-enricher/>
元素的<header-channels-to-string/>
子元素现在可以覆盖 Header Channel Registry 保留通道映射的默认时间。
有关更多信息,请参阅 Header Channel Registry 。
有序关机
我们对 orderly shutdown 算法进行了改进。 有关更多信息,请参见 Orderly Shutdown。
管理RecipientListRouter
这RecipientListRouter
现在提供了多个管理作,用于在运行时配置收件人。
这样,您现在可以配置<recipient-list-router>
没有<recipient>
从一开始。
看RecipientListRouterManagement
了解更多信息。
AbstractHeaderMapper:NON_STANDARD_HEADERS token
这AbstractHeaderMapper
implementation 现在提供额外的NON_STANDARD_HEADERS
token 映射任何用户定义的标头,默认情况下不会映射这些标头。
有关更多信息,请参阅 AMQP 消息标头。
AMQP 通道:template-channel-transacted
我们引入了template-channel-transacted
属性MessageChannel
实例。
有关更多信息,请参见 AMQP 支持的消息通道。
Syslog 适配器
默认 syslog 消息转换器现在可以选择在有效负载中保留原始消息,同时仍设置标头。 有关更多信息,请参阅 Syslog 入站通道适配器。
聚合商建议链
Aggregator
和Resequencer
现在支持<expire-advice-chain/>
和<expire-transactional/>
子元素来通知forceComplete
操作。
有关更多信息,请参阅使用 XML 配置聚合器。
Resequencer 更改
当 resequencer 中的消息组超时时(使用group-timeout
或MessageGroupStoreReaper
),现在默认情况下,将立即丢弃延迟到达的消息。
请参阅 Resequencer。
可选的 POJO 方法参数
Spring 集成现在始终如一地处理 Java 8 的Optional
类型。
请参阅配置 Service Activator。
QueueChannel
backed Queue 类型
这QueueChannel
支持Queue type
已从BlockingQueue
到更通用的Queue
.
此更改允许使用任何外部Queue
实现(例如,Reactor 的PersistentQueue
).
看QueueChannel
配置.
ChannelInterceptor
变化
这ChannelInterceptor
现在支持额外的afterSendCompletion()
和afterReceiveCompletion()
方法。
请参见Channel Interceptor。
IMAP PEEK
从版本 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
类。
有关更多信息,请参阅 Annotation Support 。
@IntegrationComponentScan
我们添加了@IntegrationComponentScan
注解允许对 Spring 集成特定的组件进行 Classpath 扫描。
有关更多信息,请参阅 Annotation Support 。
“@EnableMessageHistory”
您现在可以使用@EnableMessageHistory
注解@Configuration
类。
此外,JMX MBean 还可以修改消息历史记录设置。
也MessageHistory
可以跟踪自动创建的MessageHandler
带注释的终端节点(例如@ServiceActivator
,@Splitter
等)。
有关更多信息,请参阅消息历史记录。
@MessagingGateway
现在,您可以使用@MessagingGateway
注解。
它是<int:gateway/>
XML 元素。
有关更多信息,请参阅@MessagingGateway
注解.
Spring Boot@EnableAutoConfiguration
以及@EnableIntegration
注解中,我们引入了一个钩子,允许使用 Spring Boot 的@EnableAutoConfiguration
注解。
有关详细信息,请参阅 Spring Boot 参考指南中的“自动配置”。
@GlobalChannelInterceptor
以及@EnableIntegration
注解中,我们引入了@GlobalChannelInterceptor
注解。
有关更多信息,请参阅注释支持。
@IntegrationConverter
我们引入了@IntegrationConverter
注解作为<int:converter/>
元件。
有关更多信息,请参阅注释支持。
@EnablePublisher
我们添加了@EnablePublisher
注解以允许指定default-publisher-channel
为@Publisher
附注。
有关更多信息,请参阅 Annotation Support 。
Redis 通道消息存储
我们添加了一个 RedisMessageGroupStore
,经过优化,可在备份QueueChannel
用于持久性。
有关更多信息,请参阅 Redis 通道消息存储。
我们添加了一个 RedisChannelPriorityMessageStore
.
您可以使用它来按优先级检索消息。
有关更多信息,请参阅 Redis 通道消息存储。
MongodDB Channel 消息存储
MongoDB 支持现在提供MongoDbChannelMessageStore
,这是特定于通道的MessageStore
实现。
跟priorityEnabled = true
,您可以在<int:priority-queue>
元素来实现持久化消息的优先顺序轮询。
有关更多信息,请参阅 MongoDB 通道消息存储。
@EnableIntegrationMBeanExport
您现在可以启用IntegrationMBeanExporter
使用@EnableIntegrationMBeanExport
注解@Configuration
类。
有关更多信息,请参阅 MBean 导出器。
ChannelSecurityInterceptorFactoryBean
ChannelSecurityInterceptorFactoryBean
现在支持为使用@Configuration
类。
有关更多信息,请参阅 Spring Integration 中的安全性。
Redis 命令网关
Redis 支持现在提供<outbound-gateway>
组件来执行通用 Redis 命令,方法是使用RedisConnection#execute
方法。
有关更多信息,请参阅 Redis 出站命令网关。
RedisLockRegistry
这RedisLockRegistry
现在可用于支持对多个应用程序实例和服务器可见的全局锁定。
这些可用于跨多个应用程序实例聚合消息处理程序,以便仅在一个实例上发生组发布。
有关更多信息,请参阅 Redis Lock Registry and Aggregator。
@Poller
基于注释的消息传送配置现在可以具有poller
属性。
这意味着@ServiceActivator
,@Aggregator
,类似的注解现在可以使用inputChannel
这是对PollableChannel
.
有关更多信息,请参阅注释支持。
@InboundChannelAdapter
和SmartLifecycle
对于带注释的终端节点
我们添加了@InboundChannelAdapter
method 注解。
它是<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 框架spring-messaging
模块。
在代码中直接引用这些类的开发人员需要进行更改,如 3.0 到 4.0 迁移指南的第一部分所述。
XPath Header Enricher 的 Header Type
我们引入了header-type
属性header
子元素的<int-xml:xpath-header-enricher>
.
此属性提供 header 值的目标类型(XPath 表达式评估的结果将转换为该类型)。
有关更多信息,请参阅 XPath Header Enricher。
对象到 JSON 转换器:节点结果
我们引入了result-type
属性<int:object-to-json-transformer>
.
此属性为将对象映射到 JSON 的结果提供目标类型。
它支持STRING
(默认值)和NODE
.
有关更多信息,请参阅从 3.0 版本开始, Spring 集成还提供了一个内置的#xpath
用于表达式的 SPEL 函数。.
JMS 标头映射
这DefaultJmsHeaderMapper
现在映射传入的JMSPriority
标头添加到 Spring 集成priority
页眉。
以前priority
仅考虑用于出站邮件。
有关更多信息,请参阅将消息标头映射到 JMS 消息和从 JMS 消息映射消息。
JMS 出站通道适配器
JMS 出站通道适配器现在支持session-transacted
属性(默认值:false
).
以前,您必须注入自定义的JmsTemplate
使用交易。
请参见出站通道适配器。
JMS 入站通道适配器
JMS 入站通道适配器现在支持session-transacted
属性(默认值:false
).
以前,您必须注入自定义的JmsTemplate
使用交易。
适配器允许在acknowledgeMode
,这是不正确的,不起作用。
不再允许此值。
请参见入站通道适配器。
数据类型通道
您现在可以指定MessageConverter
在将 payload 转换为已接受的datatype
实例。
有关更多信息,请参阅数据类型通道配置。
更简单的 Retry Advice 配置
我们添加了简化的命名空间支持,以配置RequestHandlerRetryAdvice
.
有关更多信息,请参阅配置重试建议。
关联终端节点:基于时间的发布策略
我们添加了互斥的group-timeout
和group-timeout-expression
attributes 设置为<int:aggregator>
和<int:resequencer>
.
这些属性允许强制完成 partialMessageGroup
,前提是ReleaseStrategy
不会释放组,并且在指定的时间内没有其他消息到达。
有关更多信息,请参阅使用 XML 配置聚合器。
Redis 元数据存储
这RedisMetadataStore
现在实现ConcurrentMetadataStore
,例如,在AbstractPersistentAcceptOnceFileListFilter
在多个应用程序实例或服务器环境中实现。
有关更多信息,请参阅 Redis 元数据存储、读取文件、FTP 入站通道适配器和 SFTP 入站通道适配器。
JdbcChannelMessageStore
和PriorityChannel
T'JdbcChannelMessageStore' 现在实现PriorityCapableChannelMessageStore
,让它用作message-store
参考priority-queue
实例。
有关更多信息,请参阅支持消息通道。
FTP 超时
这DefaultFtpSessionFactory
现在公开了connectTimeout
,defaultTimeout
和dataTimeout
properties 的子类化,无需子类化 Factory 来设置这些公共属性。
这postProcess*
方法仍可用于更高级的配置。
有关更多信息,请参阅 FTP Session Factory 。
唽: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
class 替换为IntegrationRequestMappingHandlerMapping
,该 bean 名称为integrationRequestMappingHandlerMapping
在应用程序上下文中。
解析 HTTP 入站端点时,新的IntegrationRequestMappingHandlerMapping
已注册 Bean 或重用现有 Bean。
为了实现灵活的请求映射配置, Spring 集成提供了<request-mapping/>
的子元素<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
implementations 中,我们添加了<spel-property-accessors/>
元件。
有关详细信息,请参阅 属性访问器。
Redis:新组件
我们添加了一个新的基于 Redis 的MetadataStore
实现。
您可以使用RedisMetadataStore
要维护MetadataStore
跨应用程序重启。
这个新的MetadataStore
implementation 可以与适配器一起使用,例如:
-
Twitter 入站适配器
-
Feed 入站通道适配器
我们添加了新的基于队列的组件。
我们添加了<int-redis:queue-inbound-channel-adapter/>
和<int-redis:queue-outbound-channel-adapter/>
组件分别在 Redis List 上执行 'right pop' 和 'left push'作。
有关更多信息,请参阅“Redis 支持”。
Header Channel Registry
现在,您可以指示框架将回复通道和错误通道存储在注册表中,以便以后解决。
这对于replyChannel
或errorChannel
可能会丢失(例如,在序列化消息时)。
有关更多信息,请参阅 Header Enricher 。
MongoDB 支持:新增ConfigurableMongoDbMessageStore
除了现有的eMongoDbMessageStore
,我们引入了一个新的ConfigurableMongoDbMessageStore
.
这提供了更健壮、更灵活的MessageStore
对于 MongoDB。
它与现有商店不向后兼容,但我们建议将其用于新应用程序。
现有应用程序可以使用它,但旧存储中的消息不可用。
有关更多信息,请参阅 MongoDb 支持。
Syslog 支持
基于 2.2SyslogToMapTransformer
,Spring 集成 3.0 引入了UDP
和TCP
入站通道适配器,专为接收 SYSLOG 消息而定制。
有关更多信息,请参阅 Syslog 支持。
tail
支持
我们添加了使用tail
命令在文本文件末尾添加行时生成消息。
请参见 'tail'ing 文件。
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
实例复制到Channel
.
此外,TCP 连接工厂现在提供了一个名为getOpenConnectionIds()
,这将返回所有打开的连接的标识符列表。
它允许应用程序广播到所有打开的连接,以及其他用途。
最后,连接工厂还提供了一个名为closeConnection(String connectionId)
,它允许应用程序使用其 ID 显式关闭连接。
有关更多信息,请参阅 TCP 连接事件。
入站通道适配器脚本支持
这<int:inbound-channel-adapter/>
现在支持使用<expression/>
和<script/>
子元素创建MessageSource
.
请参阅通道适配器表达式和脚本。
内容扩充器:标头扩充支持
内容扩充器现在提供<header/>
child 元素,以根据来自底层消息流的回复消息使用标头来丰富出站消息。
有关更多信息,请参阅 Payload Enricher。
一般更改
本节介绍从版本 2.2 到版本 3.0 的一般更改。
消息 ID 生成
以前,消息 ID 是使用 JDK 生成的UUID.randomUUID()
方法。
在此版本中,默认机制已更改为使用更高效、速度更快的算法。
此外,我们还添加了更改用于生成消息 ID 的策略的功能。
有关更多信息,请参阅消息 ID 生成。
“<gateway>” 更改
现在,您可以在所有网关方法中设置通用标头,并且我们添加了更多选项,用于向消息添加有关调用了哪个方法的信息。
现在,您可以完全自定义网关方法调用映射到消息的方式。
这GatewayMethodMetadata
现在是一个公共类。
它允许您以编程方式配置GatewayProxyFactoryBean
来自 Java。
有关更多信息,请参阅 Messaging Gateway。
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 标头在 from 和 to 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 的实现,版本由 Classpath 中的存在决定。 以前,仅支持 Jackson 1.x。
-
这
ObjectToJsonTransformer
和JsonToObjectTransformer
现在发出/使用包含类型信息的标头。
有关详细信息,请参阅 Transformer 中的“JSON 转换器”。
链元素id
属性
以前,id
属性<chain>
被忽略,在某些情况下,被禁止。
现在,id
属性允许<chain>
.
链元素的 bean 名称是周围链的id
和id
元素本身。
例如:'myChain$child.myTransformer.handler'。
有关更多信息,请参阅消息处理程序链。
聚合器 'empty-group-min-timeout' 属性
这AbstractCorrelatingMessageHandler
提供了一个名为empty-group-min-timeout
允许空组过期时间比部分组过期的时间长。
空组不会从MessageStore
直到它们至少在此毫秒数内未被修改。
有关更多信息,请参阅使用 XML 配置聚合器。
永久文件列表过滤器 (file, (S)FTP)
新增功能FileListFilter
使用持久MetadataStore
现已推出。
您可以使用这些来防止在系统重新启动后出现重复文件。
有关更多信息,请参阅读取文件、FTP 入站通道适配器和 SFTP 入站通道适配器。
Direct Channel Load Balancing 配置
以前,在配置LoadBalancingStrategy
在频道的dispatcher
child 元素,唯一可用的选项是使用预定义的值枚举,这不允许开发人员设置LoadBalancingStrategy
.
您现在可以使用load-balancer-ref
提供对LoadBalancingStrategy
.
有关更多信息,请参阅DirectChannel
.
PublishSubscribeChannel 行为
以前,发送到没有订阅者的 <publish-subscribe-channel/> 将返回一个false
结果。
如果与MessagingTemplate
,这将导致引发异常。
现在,PublishSubscribeChannel
具有一个名为minSubscribers
(默认:0
).
如果消息至少发送给最小数量的订阅者,则 send作被视为成功(即使该数字为零)。
如果应用程序希望在这些情况下收到异常,请将最小订户数设置为至少 1。
FTP、SFTP 和 FTPS 更改
默认情况下,FTP、SFTP 和 FTPS 终端节点不再缓存会话。
我们删除了已弃用的cached-sessions
属性。
以前,由此属性的值控制的嵌入式缓存机制不提供限制缓存大小的方法,缓存大小可以无限增长。
引入了版本 2.1CachingConnectionFactory
,它成为缓存会话的首选(现在是唯一的)方法。
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
实现中,它会可靠地关闭底层 session,同时允许对 session 进行低级别访问。
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
出站网关的 'requires-reply' 属性
所有出站网关(例如<jdbc:outbound-gateway/>
或<jms:outbound-gateway/>
) 专为 'request-reply' 场景而设计。
响应需要来自外部服务,并发布到reply-channel
或replyChannel
消息标头。
但是,在某些情况下,外部系统可能并不总是返回结果(例如,
一个<jdbc:outbound-gateway/>
当 SELECT 以空ResultSet
或者可能是单向 Web 服务)。
因此,开发人员需要一个选项来配置是否需要回复。
为此,我们引入了requires-reply
出站网关组件的属性。
在大多数情况下,默认值requires-reply
是true
.
如果没有结果,则使用ReplyRequiredException
被抛出。
将值更改为false
表示,如果外部服务没有返回任何内容,则消息流将在该点结束,类似于出站通道适配器。
WebService 出站网关有一个名为ignore-empty-responses .
它用于将空的String 响应,就好像没有收到响应一样。
默认情况下,它是true ,但您可以将其设置为false 以允许应用程序接收空的String 在 Reply message payload.
当属性为true ,空字符串被视为无响应,以便requires-reply 属性。
默认情况下,requires-reply 对于 WebService 出站网关为 false。 |
请注意,requiresReply
属性以前存在,但设置为false
在AbstractReplyProducingMessageHandler
,并且无法使用 XML 命名空间在出站网关上配置它。
以前,未收到回复的网关将静默结束流(带有 DEBUG 日志消息)。
默认情况下,通过此更改,大多数网关现在都会引发异常。
要恢复到之前的行为,请将requires-reply 自false . |
AMQP 出站网关标头映射
以前,<int-amqp:outbound-gateway/>在调用消息转换器之前映射了 Headers,并且转换器可以覆盖诸如content-type
.
出站适配器在转换后映射 headers,这意味着像content-type
从出站Message
(如果存在)被使用。
从此版本开始,网关现在在消息转换后映射标头,与适配器一致。
如果您的应用程序依赖于以前的行为(其中转换器的 Headers 覆盖了映射的 Headers),则需要筛选这些 Headers(在消息到达网关之前)或适当地设置它们。
受SimpleMessageConverter
是content-type
和content-encoding
.
自定义消息转换器可以设置其他标头。
存储过程组件改进
对于标准不支持的更复杂的特定于数据库的类型CallableStatement.getObject
方法中,我们为<sql-parameter-definition/>
元素中具有 OUT-direction 的 OUT-Direction:
-
type-name
-
return-type
这row-mapper
存储过程入站通道适配器的属性<returning-resultset/>
子元素现在支持对RowMapper
bean 定义。
以前,它仅包含类名(仍受支持)。
有关详细信息,请参阅存储过程。
Web 服务出站 URI 配置
Web 服务出站网关“uri”属性现在支持<uri-variable/>
替换 Spring Web 服务支持的所有 URI 方案。
有关更多信息,请参阅出站 URI 配置。
Redis 适配器更改
Redis 入站通道适配器现在可以使用null
值serializer
属性,其中原始数据是消息有效负载。
Redis 出站通道适配器现在具有topic-expression
属性来确定Message
在运行时。
Redis 入站通道适配器,除了现有的topics
属性,现在具有topic-patterns
属性。
有关更多信息,请参阅 Redis 支持。
Advising Filters
以前,当<filter/>
有一个<request-handler-advice-chain/>
,则丢弃作都是在通知链的范围内执行的(包括discard-channel
).
filter 元素现在有一个名为discard-within-advice
(默认:true
) 以允许在通知链完成后执行 discard作。
请参阅 Advice Filters。
使用注释为终端节点提供建议
现在可以使用 annotation 配置请求处理程序通知链。 请参阅使用注释通知终端节点。
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>
提供了delay-header-name
属性来确定运行时的延迟值。
在复杂情况下,<delayer>
必须在<header-enricher>
.
Spring Integration 3.0 引入了expression
attribute 和expression
用于动态延迟确定的子元素。
这delay-header-name
属性现已弃用,因为您可以在expression
.
此外,我们还引入了ignore-expression-failures
来控制表达式计算失败时的行为。
有关更多信息,请参阅延迟器。
JDBC 消息存储改进
Spring 集成 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 集成现在具有RedisStore
入站和出站通道适配器,允许您写入和读取Message
与 Redis 集合之间的有效负载。
有关更多信息,请参阅 RedisStore 出站通道适配器和 Redis Store 入站通道适配器。
MongoDB 入站和出站通道适配器
Spring 集成现在具有 MongoDB 入站和出站通道适配器,允许您写入和读取Message
payloads 来往和从 MongoDB 文档存储。
有关更多信息,请参阅 MongoDB 出站通道适配器和 MongoDB 入站通道适配器。
一般更改
本节介绍从版本 2.1 到版本 2.2 的一般更改。
向终端节点添加行为
添加<advice-chain/>
to a poller 已经有一段时间了。
但是,由此添加的行为会影响整个集成流程。
它没有解决向单个终端节点添加(例如)重试的功能。
2.2 版本引入了<request-handler-advice-chain/>
到许多端点。
此外,为此,我们添加了三个标准建议类:
-
MessageHandlerRetryAdvice
-
MessageHandlerCircuitBreakerAdvice
-
ExpressionEvaluatingMessageHandlerAdvice
有关更多信息,请参阅向终端节点添加行为。
事务同步和伪事务
Poller 现在可以参与 Spring 的 Transaction Synchronization 功能。 这允许同步诸如通过入站通道适配器重命名文件之类的作,具体取决于事务是提交还是回滚。
此外,您可以在不存在 “真实” 交易时启用这些功能,方法是PseudoTransactionManager
.
有关更多信息,请参阅事务同步。
文件适配器:改进的文件覆盖和附加处理
使用文件出站通道适配器或文件出站网关时,您可以使用新的mode
财产。
在 Spring Integration 2.2 之前,目标文件在存在时被替换。
现在,您可以指定以下选项:
-
REPLACE
(默认) -
APPEND
-
FAIL
-
IGNORE
有关更多信息,请参阅处理现有目标文件。
已将 reply-timeout 添加到更多出站网关
XML Namespace 支持将 reply-timeout 属性添加到以下出站网关:
-
AMQP 出站网关
-
文件出站网关
-
FTP 出站网关
-
SFTP 出站网关
-
WS 出站网关
弹簧-AMQP 1.1
Spring 集成现在使用 Spring AMQP 1.1。 这使得可以在 Spring 集成应用程序中使用多个功能,包括以下内容:
-
出站网关的固定回复队列
-
HA(镜像)队列
-
发布者确认
-
返回的消息
-
支持死信交换和死信队列
JDBC 支持 - 存储过程组件
SPEL 支持
使用 Spring 集成 JDBC 适配器的存储过程组件时,您现在可以使用 Spring 表达式语言 (SpEL) 提供存储过程名称或存储函数名称。
这样做可以指定要在运行时调用的存储过程。 例如,您可以提供要通过消息标头执行的存储过程名称。 有关详细信息,请参阅存储过程。
JDBC 支持:特定于通道的消息存储实现
我们添加了一个新的特定于消息通道的消息存储实现,使用特定于数据库的 SQL 查询提供更具可扩展性的解决方案。 有关更多信息,请参阅支持消息通道。
有序关机
我们添加了一个名为stopActiveComponents()
到IntegrationMBeanExporter
.
它允许以有序的方式关闭 Spring 集成应用程序,不允许新的入站消息发送到某些适配器,并等待一段时间以允许正在进行的消息完成。
ObjectToJsonTransformer
默认情况下,ObjectToJsonTransformer
现在将content-type
header 设置为application/json
.
有关更多信息,请参阅 Transformer。
HTTP 支持
默认情况下,不再启用基于 HTTP 的 Java 序列化。
以前,在设置expected-response-type
在Serializable
object、Accept
标头未正确设置。
我们更新了SerializingHttpMessageConverter
要设置Accept
header 设置为application/x-java-serialized-object
.
但是,由于这可能会导致与现有应用程序不兼容,因此我们决定不再自动将此转换器添加到 HTTP 端点。
如果你想使用 Java 序列化,你需要添加SerializingHttpMessageConverter
到相应的终端节点,方法是使用message-converters
属性(当您使用 XML 配置时)或使用setMessageConverters()
方法(在 Java 中)。
或者,您可能希望考虑改用 JSON。
它是通过使用Jackson
在 Classpath 上。
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 集成还提供了一个点对点的消息通道和一个发布-订阅消息通道,这两者都由 AMQP 交换和队列支持。
有关更多详细信息,请参阅 AMQP 支持。
支持 Spring 的 Resource 抽象
在版本 2.1 中,我们引入了一个新的资源入站通道适配器,它建立在 Spring 的资源抽象之上,以支持各种实际类型的底层资源(例如文件、URL 或 Classpath 资源)的更大灵活性。 因此,它与文件入站通道适配器类似,但比文件入站通道适配器更通用。
有关更多详细信息,请参阅 Resource Inbound Channel Adapter。
存储过程组件
在 Spring Integration 2.1 中,JDBC
Module 还通过添加几个新组件(包括入站和出站通道适配器以及出站网关)来提供存储过程支持。
存储过程支持利用了 Spring 的SimpleJdbcCall
类,因此支持以下存储过程:
-
阿帕奇德比
-
DB2
-
MySQL (MySQL的
-
Microsoft SQL 服务器
-
神谕
-
PostgreSQL 数据库
-
Sybase
存储过程组件还支持以下数据库的 SQL 函数:
-
MySQL (MySQL的
-
Microsoft SQL 服务器
-
神谕
-
PostgreSQL 数据库
有关详细信息,请参阅存储过程。
XPath 和 XML 验证过滤器
Spring 集成 2.1 提供了一个基于 XPath 的新消息过滤器。
它是XML
模块。
XPath 筛选器允许您使用 XPath 表达式筛选消息。
我们还添加了 XML 验证筛选器的文档。
有关更多详细信息,请参阅使用 XPath 筛选器和 XML 验证筛选器。
Payload Enricher
从 Spring Integration 2.1 开始,我们添加了有效负载丰富器。
有效负载扩充器定义一个终端节点,该终端节点通常传递Message
发送到公开的请求通道,然后期望收到回复消息。
然后,回复消息成为用于评估表达式以丰富目标负载的根对象。
有关更多详细信息,请参阅 Payload Enricher。
框架重构
我们以多种方式重构了 Spring 集成框架,本节将对此进行介绍。
标准化路由器配置
我们使用 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 集成的应用程序可能会中断。 |
有关更多详细信息,请参阅Routers
.
XML 架构已更新到 2.1
Spring Integration 2.1 附带了更新的 XML Schema(版本 2.1)。 它提供了许多改进,例如前面讨论的 Router 标准化。
从现在开始,开发人员必须始终声明最新的 XML 架构(当前版本 2.1)。 或者,他们可以使用无版本架构。 通常,最好的选择是使用无版本的名称空间,因为它们会自动使用 Spring Integration 的最新可用版本。
下面的示例声明了一个无版本的 Spring 集成名称空间:
<?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 集成名称空间:
<?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 集成项目使用 Git 进行版本控制。 为了进一步提高社区的知名度,该项目从 SpringSource 托管的 Git 存储库转移到了 Github。 Spring 集成 Git 存储库位于:spring-integration。
对于该项目,我们还改进了提供代码贡献的流程。 此外,我们确保每个提交都经过同行评审。 事实上,核心提交者现在遵循与贡献者相同的流程。 有关更多详细信息,请参阅 贡献。
使用 Sonar 提高源代码可见性
为了提供更好的源代码可见性,从而监控 Spring 集成源代码的质量,我们设置了一个 Sonar 实例。 我们每晚收集指标,并在 sonar.spring.io 上提供这些指标。
新样本
对于 Spring Integration 的 2.1 版本,我们还扩展了 Spring Integration Samples 项目并添加了许多新示例,例如涵盖 AMQP 支持的示例、展示新有效负载丰富器的示例、说明用于测试 Spring Integration 流片段的技术的示例,以及针对 Oracle 数据库执行存储过程的示例。 有关详细信息,请访问 spring-integration-samples。
版本 1.0 和 2.0 之间的更改
请参阅迁移指南,了解可能影响应用程序的重要更改。
Spring 3 支持
Spring Integration 2.0 构建在 Spring 3.0.5 之上,并为我们的用户提供了它的许多功能。
[[2.0-spel-支持]] ===== 对 Spring 表达式语言 (SpEL) 的支持
现在,你可以在transformer、router、filter、splitter、aggregator、service-activator、header-enricher以及Spring Integration核心命名空间的更多元素以及各种适配器中使用 SPEL 表达式。 本指南包含许多示例。
转换服务和转换器
现在,您可以在配置许多 Spring 集成组件(例如 Datatype 通道)时从 Spring 提供的转换服务支持中受益。 请参阅 Message Channel 实现 和 Service Activator。 此外,上一点中提到的 SPEL 支持也依赖于转换服务。 因此,您可以注册一次转换器,并在使用 SpEL 表达式的任何地方利用它们。
TaskScheduler
和Trigger
Spring 3.0 定义了两个与调度相关的新策略:TaskScheduler
和Trigger
.
Spring 集成(使用大量调度)现在建立在这些基础上。
事实上, Spring Integration 1.0 最初定义了一些组件(例如CronTrigger
),它们现在已经迁移到 Spring 3.0 的核心 API 中。
现在,你可以从整个应用程序上下文中重用相同的组件中受益(不仅仅是 Spring 集成配置)。
我们还通过提供直接配置速率、延迟、cron 表达式和触发器引用的属性,大大简化了 Spring 集成 Poller 的配置。
有关示例配置,请参阅 Channel Adapter 。
RestTemplate
和HttpMessageConverter
我们的出站 HTTP 适配器现在委托给 Spring 的RestTemplate
执行 HTTP 请求并处理其响应。
这也意味着您可以重复使用任何自定义HttpMessageConverter
实现。
有关更多详细信息,请参阅 HTTP 出站组件。
企业集成模式添加
同样在 2.0 中,我们添加了对 Hohpe 和 Woolf 的 Enterprise Integration Patterns 一书中描述的更多模式的支持。
消息存储
我们现在提供对消息存储模式的支持。 消息存储提供了一种策略,用于代表范围超出单个事务的任何进程(例如聚合器和 resequencer)保留消息。 本指南的许多部分都包含如何使用消息存储的示例,因为它会影响 Spring 集成的多个领域。 有关更多详细信息,请参阅 Message Store、Claim Check、Message Channels、Aggregator、JDBC Support'“ 和 Resequencer。
控制总线
我们提供了控制总线模式的实现,它允许您使用消息传递来管理和监控端点和通道。 这些实现包括基于 SPEL 的方法和运行 Groovy 脚本的方法。 有关更多详细信息,请参阅 Control Bus 和 Control Bus。
新的通道适配器和网关
我们在 Spring Integration 2.0 中添加了几个新的通道适配器和消息传递网关。
TCP 和 UDP 适配器
我们添加了通道适配器,用于通过 TCP 和 UDP Internet 协议接收和发送消息。 有关更多详细信息,请参阅 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 适配器。
Feed 适配器
我们还添加了用于接收新闻源(ATOM 和 RSS)的通道适配器。 有关更多详细信息,请参阅 Feed Adapter。
其他新增内容
Spring 集成添加了许多其他功能。 本节将介绍它们。
Groovy 支持
Spring Integration 2.0 添加了 Groovy 支持,允许您使用 Groovy 脚本语言来提供集成和业务逻辑。 有关更多详细信息,请参阅 Groovy 支持。
映射转换器
这些对称转换器将 payload 对象相互转换Map
对象。
有关更多详细信息,请参阅 Transformer 。
JSON 转换器
这些对称转换器将有效负载对象与 JSON 相互转换。 有关更多详细信息,请参阅 Transformer 。
序列化转换器
这些对称转换器将有效负载对象与字节数组相互转换。 它们还支持 Spring 3.0.5 添加的 serializer 和 deserializer 策略接口。 有关更多详细信息,请参阅 Transformer 。
框架重构
核心 API 经过了一些重大的重构,使其更简单、更可用。
尽管我们预计对开发人员的影响应该很小,但您应该通读本文档以了解更改的内容。
具体来说,您应该阅读 Dynamic Routers、Messaging Gateways、HTTP Outbound Components、Message 和 Aggregator。
如果您直接依赖某些核心组件 (Message
,MessageHeaders
,MessageChannel
,MessageBuilder
等),您需要更新任何 import 语句。
我们重组了一些打包,以提供扩展领域模型所需的灵活性,同时避免任何循环依赖(这是框架的政策,以避免这种 “纠结”)。
新的源代码控制管理和构建基础设施
在 Spring Integration 2.0 中,我们将构建环境切换为使用 Git 进行源代码控制。 要访问我们的存储库,请访问 https://git.springsource.org/spring-integration。 我们还将构建系统切换到了 Gradle。
新的 Spring 集成示例
在 Spring Integration 2.0 中,我们已经将示例与主要版本发行版解耦。 请阅读以下博客以获取更多信息:新的 Spring 集成示例。 我们还创建了许多新示例,包括每个新适配器的示例。
用于 Spring 集成的 Spring Tool Suite 可视化编辑器
在最新版本的 SpringSource Tool Suite 中,包含一个令人惊叹的 Spring Integration 新可视化编辑器。 如果您还没有使用 STS,则可以在 Spring Tool Suite 中下载它。