更改历史
更改历史记录
新组件
添加了用于集成流定义的 Groovy DSL 实现。 有关更多信息,请参阅 Groovy DSL。
MQTT 客户端管理器
添加了新的 MQTT,以支持跨不同通道适配器的可重用 MQTT 连接。
有关更多信息,请参阅共享 MQTT 客户端支持。ClientManager
GraphQL 支持
添加了 GraphQL 支持。 有关更多信息,请参阅 GraphQL 支持。
Apache Camel 支持
引入了对 Apache Camel 路由的支持。 有关更多信息,请参阅 Apache Camel 支持。
Hazelcast 支持
Hazelcast Spring Integration Extensions 项目已作为模块迁移。
有关更多信息,请参阅 Hazelcast 支持。spring-integration-hazelcast
SMB 支持
SMB 支持已从 Spring Integration Extensions 项目添加。
Java DSL(参见工厂)也已添加到此模块中。
介绍了 和 implementation 。
有关详细信息,请参阅 SMB 支持。org.springframework.integration.smb.dsl.Smb
SmbStreamingMessageSource
SmbOutboundGateway
PostgreSQL 推送通知
A 允许通过在 添加新消息时接收推送通知。PostgresSubscribableChannel
PostgresChannelMessageTableSubscriber
JdbcChannelMessageStore
有关更多信息,请参阅 PostgreSQL:接收推送通知。
RabbitMQ 流队列支持
AMQP 模块已得到增强,可为使用 RabbitMQ Stream Queues 的入站和出站通道适配器提供支持。 有关更多信息,请参阅 RabbitMQ 流队列支持。
Apache MINA SFTP
SFTP 模块已从过时的 JCraft JSch 库完全重新设计为 Apache MINA 项目的更健壮和现代的模块。org.apache.sshd:sshd-sftp
有关更多信息,请参阅 SFTP 适配器。
千分尺观察
现在支持使用 Micrometer 对计时器启用观察和跟踪。 有关更多信息,请参阅千分尺观测。
GraalVM Polyglot 支持
脚本模块现在提供基于 GraalVM Polyglot 支持的实现。
JavaScript 支持现在基于此执行程序,因为它的 JSR223 实现已从 Java 中删除。
有关更多信息,请参阅脚本支持。PolyglotScriptExecutor
Apache Cassandra 支持
Apache Cassandra Spring Integration Extensions 项目已作为模块迁移。
有关更多信息,请参阅 Apache Cassandra 支持。spring-integration-cassandra
本机映像
支持创建 GraalVM 原生映像。 有关更多信息,请参阅本机映像支持。
一般更改
消息传递注释现在是,并且可以在同一服务方法上多次声明相同的类型。
消息传递注释不再需要 attribute 作为 的数组。@Repeatable
poller
@Poller
有关更多信息,请参阅 Annotation Support 。
为方便起见,用于 Scatter-Gather 的 XML 和 Java DSL 基于 ,现在设置了一个 ,因此 Gatherer 部分可以依赖默认的关联策略。RecipientListRouter
applySequence = true
有关更多信息,请参阅 Scatter-Gather 。
对 进行了另一个方便的 行为更改。
现在,设置 a 也会将属性重置为 ,因此不会尝试从其 key 解析通道,但逻辑会立即回退到将消息发送到 。AbstractMappingMessageRouter
defaultOutputChannel
channelKeyFallback
false
defaultOutputChannel
有关详细信息,请参阅路由器选项。
now 不会在输出上拆分 (除非它是 ) 的结果,而是发出一条包含整个集合作为有效负载的消息。AggregatingMessageHandler
Collection<Message<?>>
MessageGroupProcessor
SimpleMessageGroupProcessor
有关更多信息,请参阅 Aggregator。
工厂现在被标记为已弃用,以支持接口本身中提供的 Fluent API。
Factory 类将在将来的发行版中删除。IntegrationFlows
IntegrationFlow
有关更多信息,请参阅 Java DSL。
从 Spring Framework 开始,已弃用。
所有 Spring 集成异步 API 都已迁移到 .org.springframework.util.concurrent.ListenableFuture
6.0
CompletableFuture
Messaging Gateway 接口方法可以返回下游流,并正确异步执行下游流。Future<Void>
Mono<Void>
除了注释外,接口还可以标有 .@MessagingGateway
@Primary
@MessagingGateway
接口现在可以用作配置资源。@Import
网关代理 bean 的默认命名策略可以通过 attribute 进行自定义。
如果存在 bean,则在回退到 .@IntegrationComponentScan.nameGenerator()
AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR
AnnotationBeanNameGenerator
有关更多信息,请参阅 Messaging Gateway。
现在,框架将 bean 声明为实例,而不是以前弃用的 .integrationGlobalProperties
org.springframework.integration.context.IntegrationProperties
java.util.Properties
如果查询未返回任何记录,则生成集合作为回复的消息处理程序(例如,和其他基于 DB 的网关)现在返回空结果列表。
以前,返回结束流或引发异常,具体取决于 .JpaOutboundGateway
JdbcOutboundGateway
null
requiresReply
RMI 删除
该模块在以前的版本中被弃用后已被完全删除。
没有替代品:建议迁移到更安全的网络和应用程序协议,例如 WebSockets、RSockets、gRPC 或 REST。spring-integration-rmi
GemFire 移除
由于没有 Spring Data 对 VMware GemFire 或 Apache Geode 的支持,因此该模块已被完全删除。spring-integration-gemfire
2022.0.0
HTTP 更改
表达式评估上下文的变量(在 中公开)现在是 a,用于承载客户端设置的 Cookie 的所有值。
有关更多信息,请参阅 HTTP 支持。#cookies
HttpRequestHandlingEndpointSupport
MultiValueMap
Apache Kafka 更改
在提供入站网关或消息驱动的通道适配器时,如果还提供了 ,则会自动配置 。RetryTemplate
errorChannel
ErrorMessageSendingRecoverer
此外,还提供了 new;这可以与 a 一起使用,以避免长时间聚合重试延迟导致分区重新平衡的问题。KafkaErrorMessageSendingRecoverer
DefaultErrorHandler
有关更多信息,请参阅 Spring for Apache Kafka 支持。
JDBC 更改
现在可以提供 a 而不是依赖于应用程序上下文中的主 bean。DefaultLockRepository
PlatformTransactionManager
有关更多信息,请参阅 JDBC Lock Registry。
TCP/IP 更改
和 的属性现在默认设置为,以避免在未配置 DNS 的环境中出现延迟。lookupHost
AbstractConnectionFactory
DatagramPacketMessageMapper
false
有关更多信息,请参阅 TCP 和 UDP 支持。
JMS 更改
现在创建一个 instead of if 选项设置为 。JmsOutboundGateway
TemporaryTopic
TemporaryQueue
replyPubSubDomain
true
有关更多信息,请参阅 JMS 支持。
安全性更改
及其注释和 XML 配置已被弃用,取而代之的是 。ChannelSecurityInterceptor
@SecuredChannel
<secured-channels>
AuthorizationChannelInterceptor
有关更多信息,请参阅安全支持。
Webflux 请求属性支持
已为 添加了 Webclient 请求属性支持 。WebFluxRequestExecutingMessageHandler
有关更多信息,请参阅 WebFlux 请求属性。
新组件
文件聚合器
引入了 的基于 的 和 作为组件的实现。
有关更多信息,请参阅 File Aggregator 。FileSplitter.FileMaker
CorrelationStrategy
ReleaseStrategy
MessageGroupProcessor
FileAggregator
MQTT v5 支持
引入 和 (包括各自的 ) 以支持 MQTT v5 协议通信。
有关更多信息,请参阅 MQTT v5 支持。Mqttv5PahoMessageDrivenChannelAdapter
Mqttv5PahoMessageHandler
MqttHeaderMapper
一般更改
所有持久化实现都提供基于目标数据库流式处理 API 的协定。
有关更多信息,请参阅 Message Store 。MessageGroupStore
streamMessagesForGroup(Object groupId)
bean(如果声明)现在必须是 instead of 的实例,为了向后兼容,该支持已弃用。
添加 global 属性以指示必须使用 option (或不) 配置全局默认值。
添加 global 属性以指示全局默认值必须忽略(或不忽略)调度错误并将消息传递给下一个处理程序。
有关更多信息,请参阅全局属性。integrationGlobalProperties
org.springframework.integration.context.IntegrationProperties
java.util.Properties
spring.integration.channels.error.requireSubscribers=true
errorChannel
requireSubscribers
spring.integration.channels.error.ignoreFailures=true
errorChannel
(源轮询通道适配器和轮询使用者)视为跳过调用源。
稍后可以将其更改为不同的值,例如通过 Control Bus。
有关更多信息,请参阅轮询使用者。AbstractPollingEndpoint
maxMessagesPerPoll == 0
现在接受 a to any input channel 作为反应式流源,并使用 a below.
这在 Java DSL 中作为一个选项和消息传递注释的嵌套注释中被介绍。
有关更多信息,请参阅 Reactive Streams Support 。ConsumerEndpointFactoryBean
reactiveCustomizer
Function
ReactiveStreamsConsumer
ConsumerEndpointSpec.reactive()
@Reactive
对于某些精细调度用例,现在可以将 for a correlation 消息处理程序(和 )评估为 a。
此外,该选项也被添加到 中,以提供针对要添加到组的消息的条件。
有关更多信息,请参阅 Aggregator。groupTimeoutExpression
Aggregator
Resequencer
java.util.Date
BiFunction groupConditionSupplier
AbstractCorrelatingMessageHandler
MessageGroup
抽象可以附带 a to better for later for the group for the decision。
有关更多信息,请参阅 Message Group Condition 。MessageGroup
condition
集成流组合
添加了新的工厂方法,以允许从现有流的输出启动电流。
此外,还添加了一个终端运算符,用于在一些其他流的输入通道处继续电流流动。
有关更多信息,请参阅 集成流组合 。IntegrationFlows.from(IntegrationFlow)
IntegrationFlow
IntegrationFlowDefinition
to(IntegrationFlow)
AMQP 更改
and(以及相应的 Java DSL 构建器)现在支持将 作为 general purpose 的特定于 AMQP 的替代方案。
有关更多信息,请参阅 AMQP 支持。AmqpInboundChannelAdapter
AmqpInboundGateway
org.springframework.amqp.rabbit.retry.MessageRecoverer
RecoveryCallback
Redis 更改
现在,所有选项都有 setter,包括一个函数。
有关更多信息,请参阅 Redis 支持。ReactiveRedisStreamMessageProducer
StreamReceiver.StreamReceiverOptionsBuilder
onErrorResume
HTTP 更改
这不再回退到内容类型,而是让 根据提供的请求正文转换做出最终决定。
它现在还有一个标志(默认情况下),可以只返回响应正文,或者将整体作为回复消息有效负载返回,独立于提供的 .
也为 提供了相同的选项。
有关更多信息,请参阅 HTTP 支持。HttpRequestExecutingMessageHandler
application/x-java-serialized-object
RestTemplate
HttpMessageConverter
extractResponseBody
true
ResponseEntity
expectedResponseType
WebFluxRequestExecutingMessageHandler
文件/FTP/SFTP 更改
持久性文件列表过滤器现在具有 boolean 属性 。
将此属性设置为 , 还会设置 ,这意味着出站网关( 和 )上的递归操作现在每次都将始终遍历整个目录树。
这是为了解决未检测到目录树深处更改的问题。
此外,还会导致将文件的完整路径用作元数据存储键;这解决了以下问题:如果具有相同名称的文件在不同目录中多次出现,则过滤器无法正常工作。
重要说明:这意味着对于顶级目录下的文件,将无法找到持久性元数据存储中的现有键。
因此,默认情况下,该属性为;这可能会在未来版本中更改。forRecursion
true
alwaysAcceptDirectories
ls
mget
forRecursion=true
false
现在,这提供了一个方便的选项,而不需要显式引用 .FileInboundChannelAdapterSpec
recursive(boolean)
RecursiveDirectoryScanner
为方便起见,现在可以在命令中使用 。remoteDirectoryExpression
mv
MongoDb 更改
已添加到 MongoDd Java DSL 中。
现在,在 和 implementations上都公开了一个选项。MongoDbMessageSourceSpec
update
MongoDbMessageSource
ReactiveMongoDbMessageSource
有关更多信息,请参阅 MongoDb 支持。
网关更改
以前,在使用 XML 配置时,对于无参数方法,将忽略该选项。
有一个可能的中断性变更 - 如果方法之前是 Comments 以及 (使用不同的表达式) ,则 the 将被应用,现在 the 被应用。
有关更多信息,请参阅使用注释和 XML 的网关配置和调用无参数方法。@Gateway.payloadExpression
@Payload
@Gateway
@Payload
@Gateway.payloadExpression
新组件
Apache Kafka 的通道适配器
独立的 Spring Integration for Apache Kafka 项目已作为模块合并到该项目中。spring-integration-kafka
默认值已更改。KafkaProducerMessageHandler
sendTimeoutExpression
您现在可以访问 for underlying operations.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
,并且已引入。
有关更多信息,请参阅 ZeroMQ 支持。ZeroMqMessageHandler
ZeroMqMessageProducer
一般更改
单向消息传递网关(方法返回类型)现在在标头中显式设置一个,以忽略任何可能的下游回复。
有关更多信息,请参阅设置默认回复通道。void
nullChannel
replyChannel
此外,网关方法调用程序 () 现在提供托管 Bean 名称,作为网关代理 Bean 名称和方法签名的组合。
例如:。
这会影响为网关方法调用公开的消息历史记录和指标,并在应用程序上下文的启动和关闭期间提供精细的日志。GatewayProxyFactoryBean.MethodInvocationGateway
sampleGateway#echo(String)
聚合器(和重新排序器)现在可以使孤立组(持久存储中的组,在应用程序重新启动后没有新消息到达)过期。 有关更多信息,请参阅 Aggregator Expiring Groups 。
已删除由 Micrometer meter 替换的旧指标。
Thread Barrier 现在有两个单独的超时选项:和 .requestTimeout
triggerTimeout
TCP/UDP 更改
连接工厂现在支持多个发送组件 ();它们仍然仅限于一个接收组件 ()。
例如,这允许入站网关和出站通道适配器共享同一个工厂,同时支持请求/回复和从服务器到 Client 端的任意消息传递。
共享工厂不应与出站网关一起使用,除非正在使用一次性连接或 。
有关更多信息,请参阅 Collaborative Channel Adapters and TCP Gateways。TcpSender
TcpListener
ThreadAffinityClientConnectionFactory
UDP 通道适配器现在可以配置为 ,允许设置适配器不直接支持的套接字属性。
有关更多信息,请参阅 UDP 适配器。SocketCustomizer
AMQP 更改
出站终端节点现在具有处理发布者确认和返回的新机制。 有关更多信息,请参阅 Publisher Confirms and Returns 的替代机制。
new 受 .
有关更多信息,请参阅 入站通道适配器 。BatchMode.EXTRACT_PAYLOAD_WITH_HEADERS
AmqpInboundChannelAdapter
邮件更改
现在可以按原样生成,而无需急切地获取其内容。
有关更多信息,请参阅 Mail-receiving Channel Adapter 。AbstractMailReceiver
MimeMessage
新组件
集成模式
引入了抽象来指示 Spring 集成组件属于哪个企业集成模式(an )和类别。
有关此抽象及其用例的更多信息,请参阅其 JavaDocs 和 Integration Graph。IntegrationPattern
IntegrationPatternType
ReactiveMessageHandler
现在,框架本身支持 。
有关更多信息,请参见 ReactiveMessageHandler。ReactiveMessageHandler
ReactiveMessageSourceProducer
这是将提供的 to 包装到 for on demand 调用中的反应式实现。
有关更多信息,请参阅 Reactive Streams Support 。ReactiveMessageSourceProducer
MessageProducerSupport
MessageSource
Flux
receive()
Java DSL 扩展
引入了一个新的 API,允许使用自定义或组合的 EIP 运算符扩展现有的 Java DSL。
这还可用于为任何现成的扩展引入定制器。
有关更多信息,请参阅 DSL 扩展。IntegrationFlowExtension
IntegrationComponentSpec
Kotlin DSL
引入了用于集成流配置的 Kotlin DSL。 有关更多信息,请参阅 Kotlin DSL 章节。
ReactiveRequestHandler建议
提供 A 以自定义来自消息处理程序的回复。
有关更多信息,请参见 Reactive Advice。ReactiveRequestHandlerAdvice
Mono
HandleMessageAdviceAdapter
提供 A 来包装 any 以应用于 ,而不是默认行为。
有关更多信息,请参阅 Handling Message Advice。HandleMessageAdviceAdapter
MethodInterceptor
MessageHandler.handleMessage()
AbstractReplyProducingMessageHandler.RequestHandler.handleRequestMessage()
MongoDB 反应式通道适配器
该模块现在为 Spring Data 中的反应式 MongoDb 驱动程序支持提供通道适配器实现。
此外,MongoDb 更改流支持的反应式实现也存在于 .
有关更多信息,请参阅 MongoDB 支持。spring-integration-mongodb
MongoDbChangeStreamMessageProducer
接收消息建议
引入了一个特殊的代理 exactly 或 .
有关更多信息,请参阅智能轮询。ReceiveMessageAdvice
MessageSource.receive()
PollableChannel.receive()
一般更改
网关代理现在默认不代理方法。
有关更多信息,请参阅调用默认
方法。default
现在,内部组件(如 )在集成图中表示时具有缩短的名称。
有关更多信息,请参阅 Integration Graph。_org.springframework.integration.errorLogger
在聚合器中,当 返回 a 时,如果 与组第一条消息中的标头匹配,则对输出消息执行 。
有关更多信息,请参阅 Aggregator Programming Model 。MessageGroupProcessor
Message
MessageBuilder.popSequenceDetails()
sequenceDetails
基于 和 的新运算符已添加到 Java DSL 中。
当我们将子流配置为代理支持的渠道(如 等)的发布-订阅订阅者时,这种 Fluent API 具有其优势。
有关更多信息,请参阅子流支持。publishSubscribeChannel()
BroadcastCapableChannel
BroadcastPublishSubscribeSpec
SubscribableJmsChannel
SubscribableRedisChannel
Spring Integration 中的事务支持现在还包括配置选项 if a 或 implementation 为要发送的有效负载生成反应类型。
有关更多信息,请参阅。
另请参见 Reactive Transactions。ReactiveTransactionManager
MessageSource
MessageHandler
TransactionInterceptorBuilder
Java DSL 中添加了一个无需创建显式通道即可注册实例的新运算符。
有关更多信息,请参见 Operator intercept() 。intercept()
ChannelInterceptor
具有比较新旧值的新机制。
有关详细信息,请参阅 Idempotent Receiver Enterprise Integration Pattern。MessageStoreSelector
基类现在有一个 API,允许实现消息驱动的生产者端点,这些端点通过 reactive 发出消息。
有关更多信息,请参阅 Reactive Streams Support 。MessageProducerSupport
subscribeToPublisher(Publisher<? extends Message<?>>)
Publisher
AMQP 更改
出站通道适配器具有一个新属性,允许在一次调用的范围内发送多条消息。
有关更多信息,请参阅 AMQP 出站通道适配器。multiSend
RabbitTemplate
入站通道适配器现在支持将属性设置为 .
请参阅 AMQP 入站通道适配器consumerBatchEnabled
true
HTTP 更改
上的属性已被弃用,取而代之的是新引入的 。
有关更多信息,请参阅 JavaDocs 和控制 URI 编码。
这也影响了 ,相应的 Java DSL 和 XML 配置。
相同的选项将添加到 .encodeUri
AbstractHttpRequestExecutingMessageHandler
encodingMode
DefaultUriBuilderFactory.EncodingMode
WebFluxRequestExecutingMessageHandler
AbstractWebServiceOutboundGateway
Web 服务更改
为 Web 服务组件添加了 Java DSL 支持。
上的属性已被弃用,取而代之的是新引入的 - 类似于上面的 HTTP 更改。
有关更多信息,请参阅 Web 服务支持。encodeUri
AbstractWebServiceOutboundGateway
encodingMode
TCP 更改
默认情况下,在当前连接失败之前,不再进行故障回复。
有关更多信息,请参阅 TCP 故障转移客户端连接工厂。FailoverClientConnectionFactory
现在支持异步请求/回复。
有关更多信息,请参阅 TCP 网关。TcpOutboundGateway
现在,您可以配置客户端连接以对新连接执行一些任意测试。 有关更多信息,请参阅测试连接。
RSocket 更改
已向 添加了一个选项,其含义是将传入解码为单个单元或对其中的每个事件应用解码。
有关更多信息,请参阅 RSocket 入站网关。decodeFluxAsUnit
RSocketInboundGateway
Flux
Zookeeper 更改
A (及其 XML )公开了一个选项,用于对配置进行更多控制。
有关更多信息,请参阅 领导层事件处理 。LeaderInitiatorFactoryBean
<int-zk:leader-listener>
candidate
Candidate
MQTT 变更
现在可以将入站通道适配器配置为允许用户控制何时确认消息被传送。 有关更多信息,请参阅手动确认。
出站适配器现在会在无法创建连接或丢失时发布 。
以前,只有入站适配器执行此操作。
请参阅 MQTT 事件。MqttConnectionFailedEvent
文件更改
该模式不再需要 Jackson 处理器(或类似)依赖项。
它使用 a 表示实例的直接字符串。
有关更多信息,请参阅 FileSplitter。FileSplitter
markersJson
SimpleJsonSerializer
FileSplitter.FileMarker
行为更改
请参阅迁移指南,了解此版本中的行为更改。
新组件
RSocket 支持
该模块现在可用于 RSocket 协议支持的通道适配器实现。
有关更多信息,请参阅 RSocket 支持。spring-integration-rsocket
Rate Limit Advice 支持
现在可用于限制处理程序的请求速率。
有关更多信息,请参阅 Rate Limiter Advice 。RateLimiterRequestHandlerAdvice
Caching Advice 支持
现在,可用于在处理程序上缓存请求结果。
有关更多信息,请参见 Caching Advice 。CacheRequestHandlerAdvice
Kotlin 脚本支持
JSR223 脚本模块现在包含对 Kotlin 脚本的支持。 有关更多信息,请参阅脚本支持。
Flux 聚合器支持
现在,可用于基于 Project Reactor 运算符的分组和窗口化消息逻辑。
有关更多信息,请参阅 Flux Aggregator。FluxAggregatorMessageHandler
Flux
FTP/SFTP 事件发布者
FTP 和 SFTP 模块现在为某些 Apache Mina FTP/SFTP 服务器事件提供事件侦听器。 有关更多信息,请参阅 Apache Mina FTP 服务器事件 和 Apache Mina SFTP 服务器事件 。
Avro 转换器
现在提供了简单的 Apache Avro 转换器。 有关更多信息,请参阅 Avro Transformers。
一般更改
现在支持目标对象要反序列化为的泛型。
有关更多信息,请参阅 JSON 转换器。JsonToObjectTransformer
现在支持配置选项。
有关更多信息,请参阅 Splitter 。splitter
discardChannel
Control Bus 现在可以处理 (扩展 ) 操作。
请参阅 Control Bus 了解更多信息。Pausable
Lifecycle
已为聚合器组件引入了该策略,以合并和计算输出消息的标头。
有关更多信息,请参阅 Aggregator Programming Model 。Function<MessageGroup, Map<String, Object>>
框架中抛出的所有 s 现在都包括一个 bean 资源和源,用于在不涉及最终用户代码的情况下回溯配置部分。
有关更多信息,请参阅错误处理。MessageHandlingException
为了获得更好的最终用户体验,Java DSL 现在提供了一个 configurer 变体,用于使用网关接口启动流。
有关更多信息,请参阅 JavaDocs。
此外,a 现在是 .
和 evaluation 上下文变量现已弃用。
有关更多信息,请参阅 Messaging Gateway。IntegrationFlows.from(Class<?> serviceInterface, Consumer<GatewayProxySpec> endpointConfigurer)
MethodArgsHolder
GatewayProxyFactoryBean
#args
#method
AMQP 更改
现在可以将出站终端节点配置为在超时内未收到发布者确认时合成 “nack”。 有关更多信息,请参阅 Outbound Channel Adapter 。
入站通道适配器现在可以接收作为有效负载的批处理消息,而不是接收每个批处理片段的离散消息。
有关更多信息,请参阅 Batched Messages 。List<?>
现在可以将出站通道适配器配置为阻塞调用线程,直到收到发布者确认(确认)。 有关更多信息,请参阅 Outbound Channel Adapter 。
文件更改
对筛选远程文件进行了一些改进。 有关更多信息,请参阅 Remote Persistent File List Filters 。
TCP 更改
现在,除了有效负载之外,还可以使用 length 标头的长度。
有关更多信息,请参见Message Demarcation (Serializers and Deserializers)。ByteArrayLengthHeaderSerializer
使用 时,现在优先接受新连接而不是从现有连接中读取,但它是可配置的。
有关更多信息,请参阅关于非阻塞 I/O (NIO)。TcpNioServerConnectionFactory
出站网关具有新属性 ;当与每个请求/回复的新连接一起使用时,它会向服务器发出 EOF 信号,而不会关闭连接。
这对于使用 EOF 来表示消息结束而不是数据中的某个分隔符的服务器非常有用。
有关更多信息,请参阅 TCP 网关。closeStreamAfterSend
客户端连接工厂现在支持如果在该时间内未建立连接,则会导致引发异常。
有关更多信息,请参阅 TCP 连接工厂。connectTimeout
SoftEndOfStreamException
现在是 a 而不是扩展 。RuntimeException
IOException
邮件更改
现在有一个选项(默认情况下),用于在获取后禁用自动关闭文件夹,但改为填充标头以进行下游交互。
有关更多信息,请参阅 Mail-receiving Channel Adapter 。AbstractMailReceiver
autoCloseFolder
true
IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE
HTTP 更改
HTTP 入站终端节点现在支持请求负载验证。 有关更多信息,请参阅 HTTP 支持。
WebFlux 更改
现在支持 , 和 作为请求消息 。
现在支持请求有效负载验证。
有关更多信息,请参阅 WebFlux 支持。WebFluxRequestExecutingMessageHandler
Publisher
Resource
MultiValueMap
payload
WebFluxInboundEndpoint
MongoDb 更改
现在可以使用自定义转换器进行配置。
有关更多信息,请参阅 MongoDB 支持。MongoDbMessageStore
路由器更改
现在,您可以禁用回退到通道键作为通道 bean 名称的功能。 有关详细信息,请参阅 动态路由器 。
FTP/SFTP 更改
现在,它与 及其 解耦。RotatingServerAdvice
RotationPolicy
StandardRotationPolicy
远程文件信息,包括 host/port 和 directory 现在包含在 和 implementations.
此外,此信息包含在 implementation的 read operations 结果的 headers 中。
FTP 出站终端节点现在支持更改对上传文件的权限。
(SFTP 从 4.3 版开始就已经支持它)。
有关更多信息,请参阅 FTP(S) 支持 和 SFTP 支持。AbstractInboundFileSynchronizingMessageSource
AbstractRemoteFileStreamingMessageSource
AbstractRemoteFileOutboundGateway
chmod
5.0 和 5.1 之间的更改
新组件
以下是 5.1 中的新增功能组件:
AmqpDedicatedChannelAdvice
请参阅 严格消息排序。
@LongRunningTest
提供了 JUnit 5 条件注释,用于检查值为 of 的条目的环境或系统属性,以确定是应该运行还是跳过 test。@LongRunningTest
RUN_LONG_INTEGRATION_TESTS
true
请参阅 JUnit 规则和条件。
一般更改
版本 5.1 中进行了以下更改:
Java DSL
现在是接口,并且是 的内部接口。IntegrationFlowContext
IntegrationFlowRegistration
IntegrationFlowContext
为方便起见,当您希望在请求-回复配置的流结束时记录时,引入了一个新运算符。
这避免了与 被视为单向端流分量的混淆。logAndReply()
log()
现在,为集成流中的任何内容生成的 bean 名称都基于组件类型,以便可视化工具、日志分析器和指标收集器具有更好的可读性。NamedComponent
现在,第二个参数的 type 除外。GenericHandler.handle()
MessageHeaders
Dispatcher 异常
捕获和重新引发的异常现在更加一致:AbstractDispatcher
-
具有属性的任何类型的 A 都会原封不动地重新引发。
MessagingException
failedMessage
-
所有其他异常都包装在 a 中,并设置了 property 。
MessageDeliveryException
failedMessage
以前:
-
具有属性的任何类型的 A 都会原封不动地重新引发
MessagingException
failedMessage
-
没有属性的 A 包装在设置了该属性的 a 中。
MessagingException
failedMessage
MessagingException
failedMessage
-
其他实例被原封不动地重新抛出。
RuntimeException
-
已检查的异常包装在 a 中,并设置了 属性。
MessageDeliveryException
failedMessage
全局通道拦截器
全局通道拦截器现在应用于动态注册的通道,例如通过使用 Java DSL 或使用初始化的 bean 时。
以前,在刷新应用程序上下文后创建 bean 时,不会应用拦截器。IntegrationFlowContext
beanFactory.initializeBean()
通道拦截器
ChannelInterceptor.postReceive()
未收到消息时不再调用;不再需要检查 .
以前,该方法被调用。
如果你有一个依赖于先前行为的拦截器,请改为实现,因为无论是否收到消息,都会调用该方法。
此外,和 以前未使用 ;他们现在这样做了。null
Message<?>
afterReceiveCompleted()
PolledAmqpChannel
PolledJmsChannel
afterReceiveCompleted()
null
集成流:生成的 Bean 名称
从版本 5.0.5 开始,为 中的组件生成的 bean 名称包括 flow bean 名称,后跟一个点作为前缀。
例如,如果流 Bean 被命名为 ,则生成的 Bean 可能被命名为 。IntegrationFlow
flowBean
flowBean.generatedBean
有关更多信息,请参阅Working With Message Flows。
Aggregator 更改
如果 the 的计算结果为负值,则聚合商现在会立即使该组过期。
Only 被视为对当前消息不执行任何操作的信号。groupTimeout
null
引入了一个新属性,以允许(默认情况下)为输出消息调用 a。
此外,现在返回 an 而不是整体进行优化。popSequence
MessageBuilder.popSequenceDetails()
AbstractAggregatingMessageGroupProcessor
AbstractIntegrationMessageBuilder
Message
有关更多信息,请参阅 Aggregator。
文件更改
如果您正在使用或可以提供 a 将在创建新文件时调用。
该回调接收新创建的文件和触发回调的消息。
例如,这可用于编写 CSV 标头。FileExistsMode.APPEND
FileExistsMode.APPEND_NO_FLUSH
newFileCallback
now 在调用之前不会检查并创建目录。
因此,如果 has 的 Inbound Channel Adapter 在应用程序启动期间文件系统不会出现故障。FileReadingMessageSource
start()
FileReadingMessageSource
autoStartup = false
有关更多信息,请参阅文件支持。
AMQP 更改
我们在 .
有关更多信息,请参阅 AMQP Message Headers 底部附近的注释。ID
Timestamp
DefaultAmqpHeaderMapper
现在,该标题已正确映射为常规标题映射中的一个条目。
有关更多信息,请参阅 contentType Header 。contentType
从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载为具有附加 和 属性的 a。
这使得错误流能够确认/nack 原始消息。
有关更多信息,请参阅 入站消息转换 。ManualAckListenerExecutionFailedException
channel
deliveryTag
JDBC 更改
JDBC Inbound Channel Adapter 和 JDBC Outbound Gateway 上令人困惑的属性已被弃用,取而代之的是新引入的属性。max-rows-per-poll
max-rows
现在,当请求消息的有效负载是某种类型的实例时,它支持一项功能。JdbcMessageHandler
batchUpdate
Iterable
表 (的 ) 的索引已得到优化。
如果您在此类存储中有大型消息组,则可能需要更改索引。INT_CHANNEL_MESSAGE
JdbcChannelMessageStore
有关更多信息,请参阅 JDBC 支持。
FTP 和 SFTP 更改
现在,A 可用于使用入站通道适配器轮询多个服务器和目录。
有关更多信息,请参见入站通道适配器:轮询多个服务器和目录和入站通道适配器:轮询多个服务器和目录。RotatingServerAdvice
此外,入站适配器实例可以包含变量,该变量包含正在轮询的远程目录。
比较器的泛型类型(用于对流适配器的获取文件列表进行排序)已从 更改为 。
有关更多信息,请参阅 FTP 流入站通道适配器 和 SFTP 流入站通道适配器。localFilenameExpression
#remoteDirectory
Comparator<AbstractFileInfo<F>>
Comparator<F>
此外,现在可以为入站通道适配器的同步器提供 .
这在 用于限制检索的文件时非常有用。Comparator
maxFetchSize
这有一个新属性,当 true 时,会导致工厂在从缓存中检出现有 session 时对 执行操作。CachingSessionFactory
testSession
test()
Session
有关更多信息,请参阅 SFTP 会话缓存和 FTP 会话缓存。
Twitter 支持
由于 Spring Social 项目已进入生命周期结束状态,因此 Spring Integration 中的 Twitter 支持已移至 Extensions 项目。 有关更多信息,请参见 Spring Integration Social Twitter。
JMS 支持
现在提供 和 选项来确定 JMS 消息在运行时发送的相应 QoS 选项。
现在允许通过设置将入站和属性映射到相应的 and 选项。
当 或 停止时,关联的侦听器容器现在将关闭;这将关闭其共享连接和任何使用者。
您可以将终端节点配置为恢复到之前的行为。JmsSendingMessageHandler
deliveryModeExpression
timeToLiveExpression
DefaultJmsHeaderMapper
JMSDeliveryMode
JMSExpiration
true
setMapInboundDeliveryMode()
setMapInboundExpiration()
JmsMessageDrivenEndpoint
JmsInboundGateway
有关更多信息,请参阅 JMS 支持。
HTTP/WebFlux 支持
现在,(和 ) 作为评估上下文的根对象提供,因此请求标头、方法、URI 和正文可用于目标状态代码计算。statusCodeExpression
Function
RequestEntity<?>
有关更多信息,请参阅 HTTP 支持 和 WebFlux 支持 。
JMX 更改
现在,如果对象名称键值包含除 Java 标识符(或 period )中允许的字符以外的任何字符,则会引用这些值。
例如。
这有一个副作用,以前“允许”的名称(带有此类字符)现在将被引用。
例如。.
org.springframework.integration:type=MessageChannel,
name="input:foo.myGroup.errors"
org.springframework.integration:type=MessageChannel,
name="input#foo.myGroup.errors"
千分尺支持更改
现在,自定义框架创建的标准 Micrometer meter 变得更加简单。 有关更多信息,请参阅 Micrometer 集成。
集成图定制
现在可以通过 .
有关更多信息,请参阅 Integration Graph。IntegrationNode
Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback
IntegrationGraphServer
集成全局属性
当为类别打开逻辑电平时,现在可以在日志中打印 Integration 全局属性(包括默认值)。
有关更多信息,请参阅全局属性。DEBUG
org.springframework.integration
的 forreceiveTimeout
@Poller
为了方便起见,注释现在提供了一个选项。
有关更多信息,请参阅使用 @Poller
注释。@Poller
receiveTimeout
4.3 和 5.0 之间的更改
新组件
版本 5.0 添加了许多新组件。
Java DSL
单独的 Spring Integration Java DSL 项目现在已经合并到核心 Spring Integration 项目中。
通道适配器和网关的实现被分发到它们的特定模块中。
有关 Java DSL 支持的更多信息,请参阅 Java DSL。
另请参阅 4.3 到 5.0 迁移指南,了解迁移到 Spring Integration 5.0 所需的步骤。IntegrationComponentSpec
测试支持
我们创建了一个新的 Spring 集成测试框架来帮助测试 Spring 集成应用程序。
现在,通过测试类和工厂上的注释,您可以使集成流的 JUnit 测试变得更加容易。@SpringIntegrationTest
MockIntegration
有关更多信息,请参阅测试支持。
内容类型转换
现在,我们已经使用新的基于 的基础设施进行服务方法调用,我们可以执行从有效负载到目标方法参数的转换。InvocableHandlerMethod
contentType
有关更多信息,请参阅 内容类型转换 。
ErrorMessagePublisher
和ErrorMessageStrategy
我们添加了用于创建实例。ErrorMessagePublisher
ErrorMessageStrategy
ErrorMessage
有关更多信息,请参阅错误处理。
一般更改
Spring 集成现在完全基于 Spring Framework 和 Project Reactor 。
以前的 Project Reactor 版本不再受支持。5.0
3.1
核心变更
注释现在具有用于更轻松地配置底层 .
有关更多信息,请参阅 Annotation Support 。@Poller
errorChannel
MessagePublishingErrorHandler
所有请求-回复端点(基于 )现在都可以启动事务,因此,使整个下游流具有事务性。
有关更多信息,请参阅 Transaction Support 。AbstractReplyProducingMessageHandler
现在提供了获取角色中终端节点状态的方法。
有关更多信息,请参阅终端节点角色。SmartLifecycleRoleController
默认情况下,POJO 方法现在通过使用 ,但你可以像以前一样将它们配置为使用 SPEL。
有关更多信息,请参阅 POJO 方法调用。InvocableHandlerMethod
当将 POJO 方法作为消息处理程序时,您现在可以使用注释标记其中一个服务方法,以便为不匹配的条件提供回退机制。
有关更多信息,请参阅配置 Service Activator。@Default
我们添加了一个简单的 to always store a polled message in the current transaction context.
该消息用作 的属性,该属性包装事务完成期间引发的任何原始异常。
有关更多信息,请参阅 事务同步 。PassThroughTransactionSynchronizationFactory
failedMessage
MessagingException
现在,基于聚合器表达式的聚合器根据 而不是仅 的集合来计算表达式。
有关更多信息,请参见聚合器和 Spring 表达式语言 (SpEL)。ReleaseStrategy
MessageGroup
Message<?>
现在,您可以为 提供自定义的 .ObjectToMapTransformer
JsonObjectMapper
有关更多信息,请参见聚合器和 Spring 表达式语言 (SpEL)。
注解 和 现在支持组件名称匹配的负模式(通过预置)。
有关更多信息,请参见 Global Channel Interceptor Configuration 。@GlobalChannelInterceptor
<int:channel-interceptor>
!
当候选者无法获取锁时,现在会发出一个新的 through 。
有关更多信息,请参阅。LockRegistryLeaderInitiator
OnFailedToAcquireMutexEvent
DefaultLeaderEventPublisher
Leadership Event Handling
网关更改
当网关方法具有 return 类型并提供错误通道时,网关现在可以正确设置 header。
以前,标题未填充。
这会导致同步下游流(在调用线程上运行)将异常发送到配置的通道,但异步下游流上的异常将改为发送到默认通道。void
errorChannel
errorChannel
该接口现在有一个子句来满足提议的消息交换协定。RequestReplyExchanger
throws MessagingException
现在,您可以使用 SPEL 表达式指定请求和回复超时。 有关更多信息,请参阅 Messaging Gateway。
聚合器性能更改
默认情况下,聚合商现在使用 ,这效率更高,尤其是对于大型组。
现在,空组计划在 之后删除。
有关更多信息,请参阅 Aggregator。SimpleSequenceSizeReleaseStrategy
empty-group-min-timeout
Splitter 更改
splitter 组件现在可以处理和拆分 Java 和 Reactive Streams 对象。
如果输出通道是 ,则为后续迭代构建 ,而不是 常规 ,独立于要拆分的对象。
此外,如果可能,还提供了允许确定 and 对象大小的方法。
有关更多信息,请参阅 Splitter 。Stream
Publisher
ReactiveStreamsSubscribableChannel
AbstractMessageSplitter
Flux
Iterator
AbstractMessageSplitter
protected obtainSizeIfPossible()
Iterable
Iterator
JMS 更改
以前, Spring 集成 JMS XML 配置使用 JMS 连接工厂的默认 bean 名称 ,从而允许在组件定义中省略该属性。
我们将其重命名为 ,这是 Spring Boot 用于自动配置 JMS 连接工厂 bean 的 bean 名称。connectionFactory
jmsConnectionFactory
如果您的应用程序依赖于以前的行为,则可以将 Bean 重命名为使用当前名称,或者专门将组件配置为使用 Bean。
有关更多信息,请参阅 JMS 支持。connectionFactory
jmsConnectionFactory
邮件更改
呈现 IMAP 邮件内容时的一些不一致问题已得到解决。 有关更多信息,请参阅“邮件接收通道适配器”部分中的注释。
Feed 更改
我们没有使用 ROME 中弃用的 ,而是为 .
有关更多信息,请参阅 Feed Adapter。com.rometools.fetcher.FeedFetcher
Resource
FeedEntryMessageSource
文件更改
我们引入了新的消息报头来表示 中的相对路径。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
您现在可以将 regex 和 pattern 过滤器配置为始终传递目录。 当您在出站网关中使用递归时,这可能很有用。
默认情况下,所有入站通道适配器(基于流和同步)现在都使用适当的实现来防止重复下载远程文件。AbstractPersistentAcceptOnceFileListFilter
FTP 和 SFTP 出站网关现在支持在获取远程文件时。REPLACE_IF_MODIFIED
FileExistsMode
FTP 和 SFTP 流入站通道适配器现在在消息头中添加远程文件信息。
FTP 和 SFTP 出站通道适配器(以及用于出站网关的命令)现在也支持 as。PUT
InputStream
payload
入站通道适配器现在可以使用新引入的 .
请参阅 FTP 入站通道适配器部分中的选项以进行注入。
此外,您现在可以将这些适配器切换到 。RecursiveDirectoryScanner
scanner
WatchService
我们添加了 The command to perform the list files names remote 命令。NLST
AbstractRemoteFileOutboundGateway
现在,您可以提供 with 来更改当前请求消息的 FTP 客户端工作目录。FtpOutboundGateway
workingDirExpression
现在提供了 ,用于在同一个线程绑定的 .RemoteFileTemplate
invoke(OperationsCallback<F, T> action)
RemoteFileOperations
Session
我们添加了用于检测不完整远程文件的新过滤器。
和 现在支持在成功传输后使用 or 命令删除远程文件的选项。FtpOutboundGateway
SftpOutboundGateway
GET
MGET
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
集成属性
版本 4.3.2 添加了一个新的全局属性,允许您自定义不应复制到新创建的 .
有关更多信息,请参阅全局属性。spring.integration.readOnly.headers
Message
MessageBuilder
流更改
我们在 上添加了一个新选项,让它用于 “管道” stdin 并在管道关闭时发布应用程序事件。
有关更多信息,请参阅从 Streams 中读取。CharacterStreamReadingMessageSource
屏障变化
现在支持 discard 通道,延迟到达的触发器消息将发送到该通道。
有关更多信息,请参见 Thread Barrier。BarrierMessageHandler
AMQP 更改
AMQP 出站终端节点现在支持在使用 RabbitMQ 延迟消息交换插件时设置延迟表达式。
入站端点现在支持 Spring AMQP 。DirectMessageListenerContainer
可轮询的 AMQP 支持的通道现在阻止 Poller 配置的 Poller 线程(默认值:1 秒)。receiveTimeout
消息转换器添加到消息属性的 Headers(如 )现在用于最终消息。
以前,它取决于转换器类型,即哪些 Headers 和 Message 属性出现在最终消息中。
要覆盖转换器设置的标头,请将属性设置为 。
有关更多信息,请参阅 AMQP 支持。contentType
headersMappedLast
true
HTTP 更改
默认情况下,该属性现在是空字符串,而不是 .
有关更多信息,请参阅 HTTP 标头映射。DefaultHttpHeaderMapper.userDefinedHeaderPrefix
X-
默认情况下,现在使用 a(自 5.0.4 起)。uriVariablesExpression
SimpleEvaluationContext
有关更多信息,请参阅映射 URI 变量。
MQTT 变更
入站消息现在使用 、 和 标头进行映射,以避免在应用程序中继消息时无意中传播到出站消息。RECEIVED_TOPIC
RECEIVED_QOS
RECEIVED_RETAINED
出站通道适配器现在支持 topic、qos 和 retained 属性的表达式。 默认值保持不变。 有关更多信息,请参阅 MQTT 支持。
STOMP 更改
我们根据 Project Reactor 和扩展将 STOMP 模块更改为使用 。
根据基金会的说法,我们重命名为 。
有关更多信息,请参阅 STOMP 支持。ReactorNettyTcpStompClient
3.1
reactor-netty
Reactor2TcpStompSessionManager
ReactorNettyTcpStompSessionManager
ReactorNettyTcpStompClient
Web 服务更改
现在,您可以为实例提供外部配置的实例。WebServiceOutboundGateway
WebServiceTemplate
DefaultSoapHeaderMapper
现在可以将用户定义的标头映射到 SOAP 标头元素。javax.xml.transform.Source
Simple WebService 入站和出站网关现在可以将 complete 作为 ,允许操作 MTOM 附件。WebServiceMessage
payload
有关更多信息,请参阅 Web 服务支持。
Redis 更改
现在为 SPEL 表达式提供了额外的基于 setter 的 setter(为了方便 Java 配置)。
现在,您也可以配置 。
此外,由于 Redis 命令上的选项是可选的,因此此属性已从 更改为 。RedisStoreWritingMessageHandler
String
zsetIncrementExpression
RedisStoreWritingMessageHandler
true
false
INCR
ZADD
现在,您可以为 提供用于执行 Redis 侦听器调用程序的 。
此外,收到的消息现在包含一个标头,用于指示消息的来源(主题或模式)。RedisInboundChannelAdapter
Executor
RedisHeaders.MESSAGE_SOURCE
有关更多信息,请参阅 Redis 支持。
TCP 更改
我们添加了一个新的 to bind TCP connections to threads。ThreadAffinityClientConnectionFactory
您现在可以配置 TCP 连接工厂以支持实例,让反序列化器在“提前读取”之后“未读”(推回)字节。PushbackInputStream
我们添加了一个 without 来根据需要控制和缓冲传入数据。ByteArrayElasticRawDeserializer
maxMessageSize
有关更多信息,请参阅 TCP 和 UDP 支持。
JDBC 更改
现在为 提供了一个 setter,允许您在存储区中自定义消息插入。JdbcMessageChannelStore
ChannelMessageStorePreparedStatementSetter
现在,它提供了一个 setter,允许您自定义参数的 SQL 类型。ExpressionEvaluatingSqlParameterSourceFactory
sqlParameterTypes
有关更多信息,请参阅 JDBC 支持。
指标更改
现在支持千分尺应用程序监控(自版本 5.0.2 起)。 有关更多信息,请参阅 Micrometer 集成。
在 5.0.3 版本中对 Micrometer 进行了更改,使其更适合在尺寸系统中使用。
在 5.0.4 中进行了进一步的更改。
如果您使用 Micrometer,我们建议至少使用 5.0.4 版本。Meters |
@EndpointId
附注
在版本 5.0.4 中引入,此注释提供了在使用 Java 配置时对 Bean 命名的控制。 有关更多信息,请参见端点 Bean 名称。
4.2 和 4.3 之间的更改
新组件
版本 4.3 添加了许多新组件。
AMQP 异步出站网关
请参阅 异步出站网关。
MessageGroupFactory
我们引入了允许控制 logic 中的实例的策略。
我们为 添加了 的 实现,其中 为 默认
factory 进行标准实现。
有关更多信息,请参阅 Message Store 。MessageGroupFactory
MessageGroup
MessageGroupStore
SimpleMessageGroupFactory
SimpleMessageGroup
GroupType.HASH_SET
MessageGroupStore
PersistentMessageGroup
我们为持久化实例添加了 (lazy-load proxy) 实现,
它返回此实例 when there is (default)。
有关更多信息,请参阅 Message Store 。PersistentMessageGroup
MessageGroupStore
getMessageGroup()
lazyLoadMessageGroups
true
FTP 和 SFTP 流入站通道适配器
我们添加了入站通道适配器,这些适配器返回一个 for each file,允许您检索远程文件,而无需将它们写入本地文件系统。
有关更多信息,请参阅 FTP 流入站通道适配器 和 SFTP 流入站通道适配器。InputStream
StreamTransformer
我们添加了将有效负载转换为 a 或 a 的功能。
有关更多信息,请参阅 Stream Transformer 。StreamTransformer
InputStream
byte[]
String
集成图
我们添加了 和 REST 服务,以将 Spring 集成应用程序的运行时模型公开为图形。
有关更多信息,请参阅 Integration Graph。IntegrationGraphServer
IntegrationGraphController
JDBC Lock Registry
我们添加了通过数据库表共享的分布式锁。
有关更多信息,请参阅 JDBC Lock Registry。JdbcLockRegistry
LeaderInitiator
为LockRegistry
我们添加了基于策略的 implementation 。
有关更多信息,请参阅 领导事件处理 。LeaderInitiator
LockRegistry
一般更改
本节描述了版本 4.3 为 Spring 集成带来的一般更改。
核心变更
本节描述了对 Spring 集成核心的一般更改。
链中的出站网关
以前,您可以在链中的出站网关上指定 a。
它完全被忽视了。
gateway 的回复将转到下一个 chain element,或者,如果 gateway 是最后一个 element,则返回到 chain 的 output channel。
现在,系统会检测并禁止此情况。
如果您有此类配置,请删除 .reply-channel
reply-channel
异步服务激活器
我们添加了一个选项,使服务激活器同步。 有关更多信息,请参阅 Asynchronous Service Activator 。
邮件更改
本节描述了对 Spring 集成邮件功能的一般更改。
可自定义的用户标志
可自定义的(在 4.2.2 中添加,以提供用于表示邮件已
seen) 现在在 XML 命名空间中可用。
有关更多信息,请参阅在不支持 \Recent
时标记 IMAP 消息。userFlag
邮件消息映射
现在,您可以将入站邮件消息与包含邮件标头的有效负载和包含电子邮件内容的有效负载进行映射。
以前,有效负载始终是 raw 。
有关更多信息,请参阅入站邮件映射。MessageHeaders
MimeMessage
JMS 更改
本节描述了对 Spring 集成 JMS 功能的一般更改。
标头映射器
现在,通过调用其方法将标准标头映射为 message 属性。
有关更多信息,请参见Mapping Message Headers to and from JMS Message。DefaultJmsHeaderMapper
correlationId
toString()
异步网关
JMS 出站网关现在具有一个属性。
有关更多信息,请参阅异步网关。async
Aggregator 更改
当 POJO 聚合器释放对象集合时,行为会发生变化。
这种情况很少见,但是,如果您的应用程序这样做,则需要对 POJO 进行少量更改。
请参阅此 重要提示:SimpleMessageGroup.getMessages()
方法返回一个 unmodifiableCollection
。note 了解更多信息。Message<?>
TCP/UDP 更改
本节描述了对 Spring 集成 TCP/UDP 功能的一般更改。
事件
当服务器连接工厂启动时,会发出一个新的。
有关更多信息,请参阅 TCP 连接事件。TcpConnectionServerListeningEvent
现在,您可以在 .
有关更多信息,请参阅 UDP 适配器。destination-expression
socket-expression
<int-ip:udp-outbound-channel-adapter>
流反序列化器
在组装整个消息之前无法分配最终缓冲区的各种反序列化器现在支持池化接收数据的原始缓冲区,而不是为每个消息创建和丢弃缓冲区。 有关更多信息,请参阅 TCP 连接工厂。
TCP 消息映射器
消息映射器现在可以选择设置配置的内容类型标头。 有关更多信息,请参阅 IP 消息报头。
文件更改
本节描述了对 Spring 集成文件功能的一般更改。
目标目录创建
为 生成的文件名 可以表示一个子路径,用于在目标目录中保存文件的所需目录结构。
有关更多信息,请参阅生成文件名。FileWritingMessageHandler
现在,将目录扫描逻辑隐藏在内部类中。
我们添加了 and 选项来启用此行为。
由于 API 不一致,我们弃用了 top-level。
有关更多信息,请参阅 WatchServiceDirectoryScanner
。FileReadingMessageSource
WatchService
use-watch-service
watch-events
WatchServiceDirectoryScanner
追加和刷新
现在,您可以在追加时避免刷新文件,并在空闲期间使用多种策略刷新数据。
有关更多信息,请参阅使用 APPEND_NO_FLUSH
时刷新文件。
保留时间戳
现在,您可以配置出站通道适配器以设置目标文件的时间戳。
有关更多信息,请参阅 File Timestamps 文件时间戳。lastmodified
Splitter 更改
现在,当文件完全读取时,它会自动关闭 FTP 或 SFTP 会话。
当出站网关返回 或当您使用新的 FTP 或 SFTP 流频道适配器时,这适用。
我们还引入了一个新选项,可以转换为 JSON 以实现轻松的下游网络交互。
有关更多信息,请参阅 File Splitter 。FileSplitter
InputStream
markers-json
FileSplitter.FileMarker
String
文件过滤器
我们添加了作为 .
有关更多信息,请参阅读取文件。ChainFileListFilter
CompositeFileListFilter
AMQP 更改
本节描述了对 Spring 集成 AMQP 功能的一般更改。
内容类型消息转换器
出站终端节点现在支持配置了此类
,您可以根据 Message 内容类型选择转换器。
有关更多信息,请参阅 出站消息转换。RabbitTemplate
ContentTypeDelegatingMessageConverter
延迟消息处理的标头
Spring AMQP 1.6 增加了对延迟消息交换的支持。
标头映射现在支持此功能使用的标头 ( 和 )。amqp_delay
amqp_receivedDelay
AMQP 支持的通道
AMQP 支持的通道现在支持消息映射。 有关更多信息,请参见 AMQP 支持的消息通道。
Redis 更改
本节描述了 Spring Integration Redis 功能的一般更改。
List Push/Pop Direction
以前,队列通道适配器总是在固定方向上使用 Redis 列表,推送到左端并从右端读取。
现在,您可以分别使用 和 的 和 选项来配置读取和写入方向。
有关更多信息,请参阅 Redis Queue Inbound Channel Adapter 和 Redis Queue Outbound Channel Adapter。rightPop
leftPush
RedisQueueMessageDrivenEndpoint
RedisQueueOutboundChannelAdapter
队列入站网关默认序列化程序
入站网关中的默认序列化程序已更改为 a,以便与出站网关兼容。
有关更多信息,请参阅 Redis 队列入站网关。JdkSerializationRedisSerializer
HTTP 更改
以前,对于正文(例如 )没有标头的请求,会忽略正文。
在此版本中,此类请求的内容类型被视为与建议的内容类型
由 RFC 2616 提供。
有关更多信息,请参阅 Http 入站组件。POST
content-type
application/octet-stream
uriVariablesExpression
现在默认使用 a(自 4.3.15 起)。
有关更多信息,请参阅映射 URI 变量。SimpleEvaluationContext
SFTP 更改
本节描述了对 Spring 集成 SFTP 功能的一般更改。
chmod
变化
SFTP 出站网关(for 和 commands)和 SFTP 出站通道适配器现在支持在上传后更改远程文件权限的属性。
有关更多信息,请参阅 和 。put
mput
chmod
SFTP Outbound Channel Adapter
SFTP Outbound Gateway
FTP 更改
本节描述了对 Spring 集成 FTP 功能的一般更改。
会话更改
现在支持 and 方法,因为底层 FTP 客户端可以使用它。
这样,您现在可以配置没有表达式的 。
您还可以配置 without 或 .
有关更多信息,请参阅 FTP/FTPS 适配器。FtpSession
null
list()
listNames()
FtpOutboundGateway
remoteDirectory
<int-ftp:inbound-channel-adapter>
remote-directory
remote-directory-expression
路由器更改
现在支持超类映射,以避免在多个继承者的情况下同一通道出现重复。
为此,在初始化期间加载映射类以快速失败。ErrorMessageExceptionTypeRouter
Exception
ErrorMessageExceptionTypeRouter
ClassNotFoundException
有关详细信息,请参阅路由器。
标头映射
本节介绍版本 4.2 和 4.3 之间标头映射的更改。
AMQP 标头映射
以前,默认情况下仅映射标准 AMQP 标头。
您必须显式启用用户定义的标头的映射。
在此版本中,默认情况下会映射所有标头。
此外,默认情况下不再映射入站标头。
有关更多信息,请参阅 AMQP 消息标头。amqp_deliveryMode
Groovy 脚本
您现在可以使用 hint 或任何其他选项配置 groovy 脚本。
有关更多信息,请参阅 Groovy 配置。compile-static
CompilerConfiguration
@InboundChannelAdapter
变化
现在具有常规 的 alias 属性。
此外,目标组件现在可以以后期绑定方式从其提供的名称 ( options) 解析目标 Bean。
有关更多信息,请参阅 Annotation Support 。@InboundChannelAdapter
channel
value
SourcePollingChannelAdapter
outputChannel
outputChannelName
XMPP 更改
XMPP 通道适配器现在支持 XMPP 扩展 (XEP)。 有关更多信息,请参阅 XMPP 扩展 。
WireTap 延迟绑定
现在可以接受稍后在第一个活动拦截器操作期间解析为目标的 a。
有关详细信息,请参见 Wire Tap。WireTap
ChannelInterceptor
channelName
MessageChannel
ChannelMessageStoreQueryProvider
变化
现在支持 H2 数据库。
有关更多信息,请参阅 Backing Message Channels。ChannelMessageStoreQueryProvider
WebSocket 更改
现在公开一个选项,并公开一个选项。
有关更多信息,请参阅 WebSockets 支持。ServerWebSocketContainer
allowedOrigins
SockJsServiceOptions
suppressCors
4.1 和 4.2 之间的更改
新组件
版本 4.2 添加了许多新组件。
主要管理/JMX 返工
我们添加了一个新的策略界面。
此更改以及 JMX 和管理基础结构中的其他更改,提供了对管理配置和运行时性能的更多控制。MetricsFactory
但是,这对 (某些) 用户环境有一些重要影响。
MongoDB 元数据存储
现已推出。
有关更多信息,请参阅 MongoDB 元数据存储。MongoDbMetadataStore
SecuredChannel 注解
我们引入了注释,替换了已弃用的 .
有关更多信息,请参阅 Spring Integration 中的安全性。@SecuredChannel
ChannelSecurityInterceptorFactoryBean
SecurityContext
增殖
我们引入了 for the propagation from one message flow's thread to another message flow.
有关更多信息,请参阅 Spring Integration 中的安全性。SecurityContextPropagationChannelInterceptor
SecurityContext
FileSplitter 文件拆分器
在 4.1.2 中,我们添加了 ,它将文本文件拆分为几行。
现在,它在命名空间中得到了完全支持。
有关更多信息,请参阅 File Splitter 。FileSplitter
int-file:
Zookeeper 支持
我们向框架添加了 Zookeeper 支持,以便在集群或多主机环境中运行时提供帮助。 此更改会影响以下功能:
-
ZookeeperMetadataStore
-
ZookeeperLockRegistry
-
Zookeeper 领导层
有关更多信息,请参阅 Zookeeper 支持。
线程屏障
新的线程组件可用,允许线程暂停,直到发生某些异步事件。
有关更多信息,请参见 Thread Barrier。<int:barrier/>
STOMP 支持
我们向框架添加了 STOMP 支持作为入站和出站通道适配器对。 有关更多信息,请参阅 STOMP 支持。
Codec
引入了一种新的抽象,用于将对象编码和解码到 和 从 。
我们添加了一个使用 Kryo 的实现。
我们还添加了基于编解码器的转换器和消息转换器。
有关更多信息,请参阅 编解码器 。Codec
byte[]
消息 PreparedStatement Setter
( 和 ) 提供了新的函数接口回调,作为使用上下文填充 上的参数的替代方法。
有关更多信息,请参阅 Outbound Channel Adapter 。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 集成 TCP 功能的一般更改。
TCP 序列化程序
TCP 不再是 .
现在,这由 classes 完成。
如果直接在代码中使用序列化程序,则可能需要将 .Serializers
flush()
OutputStream
TcpNxxConnection
flush()
OutputStream
服务器套接字异常
TcpConnectionServerExceptionEvent
现在,每当 TCP 服务器套接字(也添加到 4.1.3 和 4.0.7)上发生意外异常时,都会发布实例。
有关更多信息,请参阅 TCP 连接事件。
TCP 服务器端口
如果将 TCP 服务器套接字工厂配置为侦听随机端口,则现在可以使用 获取 OS 选择的实际端口。 也可用。getPort()
getServerSocketAddress()
有关更多信息,请参阅“TCP 连接工厂”。
TCP 网关远程超时
现在支持作为 existing 属性的替代项。
这允许根据每条消息设置超时。TcpOutboundGateway
remote-timeout-expression
remote-timeout
此外,the 不再默认为 与 相同的值,这具有完全不同的含义。remote-timeout
reply-timeout
请参阅 。TCP 出站网关属性 (TCP Outbound Gateway Attributes) 了解更多信息。
TCP SSLSession 可用于标头映射
TcpConnection
implementations 现在支持让您从 session 中提取信息以添加到 message headers。
有关更多信息,请参阅 IP 消息报头。getSslSession()
TCP 事件
现在,每当发生关联异常时(例如,将消息发送到不存在的套接字),都会发布新事件。
已弃用。
请改用泛型事件适配器。TcpConnectionEventListeningMessageProducer
有关更多信息,请参阅 TCP 连接事件。
@InboundChannelAdapter
变化
以前,入站通道适配器将属性默认为 (infinity)。
这与 的 XML 配置不一致,默认为 .
注解现在将此属性默认为 .@Poller
maxMessagesPerPoll
-1
<inbound-channel-adapter/>
1
1
API 变更
o.s.integration.util.FunctionIterator
现在需要 a 而不是 .
这样做是为了消除对 Reactor 的不必要的硬依赖。
此迭代器的任何使用都需要更改导入。o.s.integration.util.Function
reactor.function.Function
网关等功能仍支持 Reactor。
对于不需要依赖项的用户,已删除依赖项。Promise
JMS 更改
本节描述了对 Spring 集成 TCP 功能的一般更改。
Reply 侦听器延迟初始化
您现在可以将 JMS 出站网关中的回复侦听器配置为按需初始化并在空闲期后停止,而不是由网关的生命周期控制。 有关更多信息,请参阅出站网关。
默认确认模式
当使用隐式定义的 时,默认值现在是 。
我们建议在使用此容器时使用,以避免消息丢失。
此默认值现在适用于消息驱动的入站适配器和入站网关。
它已经是 JMS 支持的通道的默认通道。DefaultMessageListenerContainer
acknowledge
transacted
transacted
有关更多信息,请参阅消息驱动的通道适配器和入站网关。
共享订阅
我们向消息驱动端点添加了对共享订阅 (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>
关联数据
对于出站通道适配器和入站网关,如果关联数据是 a ,则它将成为 ack 或 nack 通道上消息的基础,并添加了额外的 Headers。
以前,任何关联数据(包括 )都作为 ack 或 nack 消息的有效负载返回。Message<?>
Message<?>
入站网关属性
现在公开了该属性,以允许对 reply 的外部 bean 进行更多控制。
您还可以提供自己的实施。
此外,如果请求消息没有属性,则可以使用 if。<int-amqp:inbound-gateway>
amqp-template
RabbitTemplate
AmqpTemplate
default-reply-to
replyTo
有关更多信息,请参阅 AMQP 支持。
XPath Splitter 改进
() 现在允许对 internal 进行配置,并支持 XPath 评估结果的模式(默认为 )。XPathMessageSplitter
<int-xml:xpath-splitter>
output-properties
javax.xml.transform.Transformer
Iterator
true
org.w3c.dom.NodeList
有关更多信息,请参阅拆分 XML 消息。
HTTP 更改
本节描述了对 Spring 集成 HTTP 功能的一般更改。
CORS
HTTP 入站终端节点( 和 )现在允许
跨域资源共享 (CORS) 的配置。<int-http:inbound-channel-adapter>
<int-http:inbound-gateway>
有关更多信息,请参阅跨源资源共享 (CORS) 支持。
入站网关超时
您可以配置 HTTP 入站入口方式,以便在请求超时时返回您指定的状态代码。
默认值现在为 ,而不是 。500 Internal Server Error
200 OK
有关更多信息,请参阅响应状态代码。
表单数据
我们添加了代理请求的文档。
有关更多信息,请参阅 HTTP 支持。multipart/form-data
网关更改
本节描述了对 Spring Integration Gateway 功能的一般更改。
Gateway 方法可以返回CompletableFuture<?>
使用 Java 8 时,网关方法现在可以返回 .
有关更多信息,请参见 CompletableFuture
。CompletableFuture<?>
MessagingGateway 注释
请求和回复超时属性现在是允许使用属性占位符或 SPEL 进行配置。
请参见@MessagingGateway
注释。String
Long
Aggregator 更改
本节描述了对 Spring 集成聚合器功能的一般更改。
聚合商性能
此版本包括聚合组件(聚合器、resequencer 等)的一些性能改进,方法是在发布消息时更有效地从组中删除消息。
新方法 () 已添加到邮件存储中。
设置属性 (default: ) 以调整每个操作中删除的消息数。
目前,JDBC、Redis 和 MongoDB 消息存储支持此属性。removeMessagesFromGroup
removeBatchSize
100
输出消息组处理器
当对聚合器使用 或 inner bean 时,您现在可以直接绑定 .
此外,我们还添加了一个 ,用于返回组中的消息集合。
当输出处理器生成 的集合时,聚合器会单独释放这些消息。
配置 使聚合器成为消息屏障,消息被保留,直到它们全部到达,然后单独发布。
有关更多信息,请参阅 Aggregator。ref
MessageGroupProcessor
SimpleMessageGroupProcessor
Message<?>
SimpleMessageGroupProcessor
FTP 和 SFTP 更改
本节描述了对 Spring 集成 FTP 和 SFTP 功能的一般更改。
入站通道适配器
现在,您可以在入站通道适配器上指定 a,以便在运行时确定目录。
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。remote-directory-expression
委派 Session Factory
我们添加了一个委托会话工厂,允许根据某些线程上下文值选择特定的会话工厂。
有关更多信息,请参阅委派 Session Factory 和委派 Session Factory。
默认 sftp 会话工厂
以前,无条件允许连接到未知主机。
这现在可以配置 (default: )。DefaultSftpSessionFactory
false
工厂现在需要配置的 , 文件,除非该属性为 (default: )。knownHosts
allowUnknownKeys
true
false
Message Session 回调
我们引入了 ,以使用 .MessageSessionCallback<F, T>
Session
requestMessage
<int-(s)ftp:outbound-gateway/>
有关更多信息,请参阅使用 MessageSessionCallback
和 MessageSessionCallback。
Websocket 更改
我们添加了对 的支持,以允许对内部 .
有关更多信息,请参阅 WebSockets 命名空间支持。WebSocketHandlerDecoratorFactory
ServerWebSocketContainer
WebSocketHandler
应用程序事件适配器更改
适配器现在可以作为直接允许省略自定义扩展进行操作。
为此,我们引入了 boolean 属性。
有关更多信息,请参见Spring ApplicationEvent
Support。ApplicationEvent
payload
event
ApplicationEvent
publish-payload
<int-event:outbound-channel-adapter>
4.0 和 4.1 之间的更改
新组件
版本 4.1 添加了许多新组件。
Promise<?> 网关
消息传递网关方法现在支持 Reactor 返回类型。
请参阅 异步网关。Promise
WebSocket 支持
该模块现已推出。
它完全基于 Spring WebSocket 和 Spring Messaging 模块,并提供了一个 .
有关更多信息,请参阅 WebSockets 支持。WebSocket
<inbound-channel-adapter>
<outbound-channel-adapter>
Scatter-Gather 企业集成模式
我们实施了 scatter-gather 企业集成模式。 有关更多信息,请参阅 Scatter-Gather 。
Routing Slip Pattern
我们添加了路由滑 EIP 模式实现。 有关更多信息,请参阅路由单。
幂等接收器模式
我们通过在 XML 中添加组件或 Java 配置的 and 注释来添加幂等接收器企业集成模式实现。
有关更多信息,请参阅 Idempotent Receiver Enterprise Integration Pattern 和 Javadoc。<idempotent-receiver>
IdempotentReceiverInterceptor
IdempotentReceiver
福音JsonObjectMapper
我们为 JSON 转换器添加了 Boon。
有关更多信息,请参阅 Transformer 。JsonObjectMapper
Redis 队列网关
我们添加了 and 组件。
请参阅 Redis 队列入站网关和 Redis 队列出站网关。<redis-queue-inbound-gateway>
<redis-queue-outbound-gateway>
PollSkipAdvice
我们添加了 ,您可以在 中使用它来确定是否应由您使用 实施的某些条件来抑制(跳过)当前轮询。
有关更多信息,请参阅 轮询器。PollSkipAdvice
<advice-chain>
<poller>
PollSkipStrategy
一般更改
本节介绍从版本 4.0 到版本 4.1 的一般更改。
AMQP 入站终端节点,通道
使用消息侦听器容器的元素(入站终端节点和通道)现在支持该属性。
有关更多信息,请参阅 AMQP 支持。missing-queues-fatal
AMQP 出站终端节点
AMQP 出站终端节点支持名为 (default: ) 的新属性。
When 时,在第一条消息到达之前,不会建立与代理的连接(假设没有入站终端节点,这些终端节点总是在启动期间尝试建立连接)。
设置为 时,将在应用程序启动期间尝试建立连接。
有关更多信息,请参阅 AMQP 支持。lazy-connect
true
true
false
简单消息存储
在调用 时,不再复制组。
有关详细信息,请参阅 [WARNING]。SimpleMessageStore
getMessageGroup()
Http 入站通道适配器和状态代码
现在可以配置 以覆盖默认状态。
有关更多信息,请参阅 HTTP 命名空间支持。<http:inbound-channel-adapter>
status-code-expression
200 OK
MQTT 适配器更改
您现在可以将 MQTT 通道适配器配置为连接到多个服务器,例如,支持高可用性 (HA)。 有关更多信息,请参阅 MQTT 支持。
MQTT 消息驱动的通道适配器现在支持为每个订阅指定 QoS 设置。 有关更多信息,请参见入站 (消息驱动) 通道适配器。
MQTT 出站通道适配器现在支持异步发送,从而避免在确认交付之前阻塞。 有关更多信息,请参阅 Outbound Channel Adapter 。
现在可以在运行时以编程方式订阅和取消订阅主题。 有关更多信息,请参见入站 (消息驱动) 通道适配器。
FTP 和 SFTP 适配器更改
FTP 和 SFTP 出站通道适配器现在支持附加到远程文件,并在远程文件已存在时执行特定操作。
远程文件模板现在也支持此功能以及 和 。
此外,远程文件模板还提供对底层客户端对象的访问,从而允许访问低级 API。rmdir()
exists()
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
Splitter 和 Iterator
Splitter
组件现在支持用于生成输出消息的 As Result对象。
有关更多信息,请参阅 Splitter 。Iterator
聚合
Aggregator
instancess 现在支持新属性 。
有关更多信息,请参阅 Aggregator。expire-groups-upon-timeout
内容丰富器改进
我们添加了一个属性,如果返回,则评估并返回该属性。
您可以将其添加到 和 中。
有关更多信息,请参阅 内容扩充器 。null-result-expression
<enricher>
null
<header>
<property>
我们添加了一个属性,该属性用于处理 .
这样,您就可以返回用于扩充的替代对象。
有关更多信息,请参阅 内容扩充器 。error-channel
Exception
request-channel
Header Channel Registry
该元素的子元素现在可以覆盖标题通道注册表保留通道映射的默认时间。
有关更多信息,请参阅 Header Channel Registry 。<header-enricher/>
<header-channels-to-string/>
有序关机
我们对 orderly shutdown 算法进行了改进。 有关更多信息,请参见 Orderly Shutdown。
管理RecipientListRouter
现在提供了多个管理操作,用于在运行时配置收件人。
这样,您现在可以从一开始就配置 without any。
有关更多信息,请参阅 RecipientListRouterManagement
。RecipientListRouter
<recipient-list-router>
<recipient>
AbstractHeaderMapper:NON_STANDARD_HEADERS token
该实现现在提供了额外的令牌来映射任何用户定义的标头,默认情况下不会映射这些标头。
有关更多信息,请参阅 AMQP 消息标头。AbstractHeaderMapper
NON_STANDARD_HEADERS
AMQP 通道:template-channel-transacted
我们引入了 AMQP 实例的属性。
有关更多信息,请参见 AMQP 支持的消息通道。template-channel-transacted
MessageChannel
Syslog 适配器
默认 syslog 消息转换器现在可以选择在有效负载中保留原始消息,同时仍设置标头。 有关更多信息,请参阅 Syslog 入站通道适配器。
聚合商建议链
Aggregator
现在 support 和 child 元素来为操作提供建议。
有关更多信息,请参阅使用 XML 配置聚合器。Resequencer
<expire-advice-chain/>
<expire-transactional/>
forceComplete
Resequencer 更改
现在,默认情况下,当 resequencer 中的消息组超时(使用 或 a )时,会立即丢弃延迟到达的消息。
请参阅 Resequencer。group-timeout
MessageGroupStoreReaper
可选的 POJO 方法参数
Spring 集成现在始终如一地处理 Java 8 的类型。
请参阅配置 Service Activator。Optional
QueueChannel
backed Queue 类型
backed 已从 更改为更通用的 .
此更改允许使用任何外部实现(例如 Reactor 的 )。
参见 QueueChannel
配置。QueueChannel
Queue type
BlockingQueue
Queue
Queue
PersistentQueue
ChannelInterceptor
变化
现在支持其他 and 方法。
请参见Channel Interceptor。ChannelInterceptor
afterSendCompletion()
afterReceiveCompletion()
IMAP PEEK
从版本 4.1.1 开始,如果将 JavaMail 属性显式设置为 (where is 或 ),则行为会发生变化。
请参阅 [重要 ]。mail.[protocol].peek
false
[protocol]
imap
imaps
3.0 和 4.0 之间的更改
新组件
版本 4.0 添加了许多新组件。
MQTT 通道适配器
MQTT 通道适配器(以前在 Spring Integration Extensions 存储库中提供)现在作为常规 Spring Integration 发行版的一部分提供。 请参阅 MQTT 支持。
@EnableIntegration
我们添加了 Comments,以允许在使用类时声明标准 Spring Integration bean。
有关更多信息,请参阅 Annotation Support 。@EnableIntegration
@Configuration
@IntegrationComponentScan
我们添加了 Comments 以允许对 Spring 集成特定的组件进行 Classpath 扫描。
有关更多信息,请参阅 Annotation Support 。@IntegrationComponentScan
“@EnableMessageHistory”
现在,您可以在类中使用 annotation 启用消息历史记录。
此外,JMX MBean 还可以修改消息历史记录设置。
此外,还可以跟踪带注释的终端节点(例如 、 等)的自动创建实例。
有关更多信息,请参阅消息历史记录。@EnableMessageHistory
@Configuration
MessageHistory
MessageHandler
@ServiceActivator
@Splitter
@MessagingGateway
现在,您可以使用注释配置 Messaging Gateway 接口。
它是 XML 元素的类似物。
有关更多信息,请参见@MessagingGateway
注释。@MessagingGateway
<int:gateway/>
Spring Boot@EnableAutoConfiguration
除了前面提到的 Comments 之外,我们还引入了一个 hook,允许使用 Spring Boot 的 Comments 配置 Spring 集成基础设施 bean。
有关详细信息,请参阅 Spring Boot 参考指南中的“自动配置”。@EnableIntegration
@EnableAutoConfiguration
@GlobalChannelInterceptor
除了上面提到的 annotation 之外,我们还引入了 annotation。
有关更多信息,请参阅注释支持。@EnableIntegration
@GlobalChannelInterceptor
@IntegrationConverter
我们引入了 annotation 作为组件的类似物。
有关更多信息,请参阅注释支持。@IntegrationConverter
<int:converter/>
@EnablePublisher
我们添加了 annotation 以允许规范 for annotations。
有关更多信息,请参阅 Annotation Support 。@EnablePublisher
default-publisher-channel
@Publisher
Redis 通道消息存储
我们添加了一个 Redis,该 Redis 经过优化,可在支持持久性时使用。
有关更多信息,请参阅 Redis 通道消息存储。MessageGroupStore
QueueChannel
我们添加了一个 Redis .
您可以使用它来按优先级检索消息。
有关更多信息,请参阅 Redis 通道消息存储。ChannelPriorityMessageStore
MongodDB Channel 消息存储
MongoDB 支持现在提供 ,这是特定于通道的实现。
使用 ,您可以在元素中使用它来实现持久消息的优先级顺序轮询。
有关更多信息,请参阅 MongoDB 通道消息存储。MongoDbChannelMessageStore
MessageStore
priorityEnabled = true
<int:priority-queue>
@EnableIntegrationMBeanExport
现在,您可以在类中启用 with the annotation。
有关更多信息,请参阅 MBean 导出器。IntegrationMBeanExporter
@EnableIntegrationMBeanExport
@Configuration
ChannelSecurityInterceptorFactoryBean
ChannelSecurityInterceptorFactoryBean
现在支持为使用类的消息通道配置 Spring Security。
有关更多信息,请参阅 Spring Integration 中的安全性。@Configuration
Redis 命令网关
Redis 支持现在提供了使用该方法执行通用 Redis 命令的组件。
有关更多信息,请参阅 Redis 出站命令网关。<outbound-gateway>
RedisConnection#execute
RedisLockRegistry
现在,它可用于支持对多个应用程序实例和服务器可见的全局锁定。
这些可用于跨多个应用程序实例聚合消息处理程序,以便仅在一个实例上发生组发布。
有关更多信息,请参阅 Redis Lock Registry and Aggregator。RedisLockRegistry
@Poller
基于 Annotation 的消息收发配置现在可以具有属性。
这意味着用 、 和类似注释注释的方法现在可以使用对 .
有关更多信息,请参阅注释支持。poller
@ServiceActivator
@Aggregator
inputChannel
PollableChannel
@InboundChannelAdapter
以及带注释的端点SmartLifecycle
我们添加了 method 注解。
它是 XML 组件的类似物。
此外,所有消息收发注释现在都提供选项。
有关更多信息,请参阅注释支持。@InboundChannelAdapter
<int:inbound-channel-adapter>
SmartLifecycle
Twitter 搜索出站网关
我们添加了一个新的 Twitter 端点:.
与每次都使用相同的搜索查询进行轮询的搜索入站适配器不同,出站网关允许按需自定义查询。
有关更多信息,请参阅 Spring Integration Social Twitter。<int-twitter-search-outbound-gateway/>
@BridgeFrom
和 Annotations@BridgeTo
我们引入了 和 方法注解来标记类中的 bean。
有关更多信息,请参阅注释支持。@BridgeFrom
@BridgeTo
@Bean
MessageChannel
@Configuration
元消息注释
消息收发注释(、、 、 和其他注释)现在可以配置为用户定义的消息收发注释的元注释。
此外,用户定义的注释可以具有相同的属性 (、 、 和其他)。
有关更多信息,请参阅注释支持。@ServiceActivator
@Router
@MessagingGateway
inputChannel
@Poller
autoStartup
一般更改
本节介绍从版本 3.0 到版本 4.0 的一般更改。
需要 Spring Framework 4.0
我们将核心消息传递抽象(、 和其他)移动到 Spring Framework 模块。
在代码中直接引用这些类的开发人员需要进行更改,如 3.0 到 4.0 迁移指南的第一部分所述。Message
MessageChannel
spring-messaging
XPath Header Enricher 的 Header Type
我们引入了 .
此属性提供 header 值的目标类型(XPath 表达式评估的结果将转换为该类型)。
有关更多信息,请参阅 XPath Header Enricher。header-type
header
<int-xml:xpath-header-enricher>
对象到 JSON 转换器:节点结果
我们引入了 .
此属性为将对象映射到 JSON 的结果提供目标类型。
它支持 (默认) 和 .
有关更多信息,请参阅从 3.0 版本开始, Spring 集成还提供了内置的 #xpath
SPEL 函数,用于表达式。result-type
<int:object-to-json-transformer>
STRING
NODE
JMS 标头映射
现在将传入的 Headers 映射到 Spring Integration Headers。
以前,仅考虑用于出站邮件。
有关更多信息,请参阅将消息标头映射到 JMS 消息和从 JMS 消息映射消息。DefaultJmsHeaderMapper
JMSPriority
priority
priority
JMS 出站通道适配器
JMS 出站通道适配器现在支持属性 (default: )。
以前,您必须注入自定义的 transaction 才能使用。
请参见出站通道适配器。session-transacted
false
JmsTemplate
JMS 入站通道适配器
JMS 入站通道适配器现在支持属性 (default: )。
以前,您必须注入自定义的 transaction 才能使用。
适配器允许在 中执行“transacted”,这是不正确的,因此无法正常工作。
不再允许此值。
请参见入站通道适配器。session-transacted
false
JmsTemplate
acknowledgeMode
数据类型通道
现在,您可以指定在将 payloads(如有必要)转换为 Datatype 通道中接受的实例之一时使用。
有关更多信息,请参阅数据类型通道配置。MessageConverter
datatype
更简单的 Retry Advice 配置
我们添加了简化的命名空间支持来配置 .
有关更多信息,请参阅配置重试建议。RequestHandlerRetryAdvice
关联终端节点:基于时间的发布策略
我们向 和 添加了互斥的 and 属性。
这些属性允许强制完成 partial ,前提是 不会释放组,并且在指定的时间内没有其他消息到达。
有关更多信息,请参阅使用 XML 配置聚合器。group-timeout
group-timeout-expression
<int:aggregator>
<int:resequencer>
MessageGroup
ReleaseStrategy
Redis 元数据存储
现在实现 ,使其在多应用程序实例或服务器环境中的实现中使用。
有关更多信息,请参阅 Redis 元数据存储、读取文件、FTP 入站通道适配器和 SFTP 入站通道适配器。RedisMetadataStore
ConcurrentMetadataStore
AbstractPersistentAcceptOnceFileListFilter
JdbcChannelMessageStore
和PriorityChannel
T'JdbcChannelMessageStore' 现在实现了 ,让它用作实例的引用。
有关更多信息,请参阅支持消息通道。PriorityCapableChannelMessageStore
message-store
priority-queue
FTP 超时
现在公开了 , , 和 属性,避免了对工厂进行子类化来设置这些公共属性的需要。
这些方法仍可用于更高级的配置。
有关更多信息,请参阅 FTP Session Factory 。DefaultFtpSessionFactory
connectTimeout
defaultTimeout
dataTimeout
postProcess*
唽:StatusUpdatingMessageHandler
() 现在支持使用该属性来构建用于更新时间轴状态的对象。
例如,此功能允许附加图像。
有关更多信息,请参见 Spring Integration Social Twitter。StatusUpdatingMessageHandler
<int-twitter:outbound-channel-adapter>
tweet-data-expression
org.springframework.social.twitter.api.TweetData
JPA 检索网关:id-expression
我们引入了 to perform 的属性。
有关更多信息,请参阅检索出站网关。id-expression
<int-jpa:retrieving-outbound-gateway>
EntityManager.find(Class entityClass, Object primaryKey)
TCP 反序列化事件
当其中一个标准反序列化器在将输入流解码为消息时遇到问题时,它现在会发出一个 ,让应用程序检查发生异常时的数据。
有关更多信息,请参阅 TCP 连接事件。TcpDeserializationExceptionEvent
定义上的消息注释@Bean
现在,您可以在类中的定义上配置消息注释(、、 、 和其他)。
有关更多信息,请参阅注释支持。@ServiceActivator
@Router
@InboundChannelAdapter
@Bean
@Configuration
2.2 和 3.0 之间的变化
新组件
版本 3.0 添加了许多新组件。
HTTP 请求映射
HTTP 模块现在为入站终端节点提供强大的请求映射支持。
我们将类替换为 ,它在应用程序上下文中的 bean 名称下注册。
在解析 HTTP 入站端点时,要么注册一个新的 Bean,要么重用现有的 Bean。
为了实现灵活的请求映射配置, Spring 集成提供了 的子元素 和 .
现在,两个 HTTP 入站端点都完全基于 Spring MVC 3.1 中引入的请求映射基础设施。
例如,单个入站终端节点支持多个路径。
有关更多信息,请参阅 HTTP 命名空间支持。UriPathHandlerMapping
IntegrationRequestMappingHandlerMapping
integrationRequestMappingHandlerMapping
IntegrationRequestMappingHandlerMapping
<request-mapping/>
<http:inbound-channel-adapter/>
<http:inbound-gateway/>
Spring 表达式语言 (SpEL) 配置
我们添加了一个新的允许配置自定义实现和函数,以便在整个框架中的 SPEL 表达式中使用。
有关更多信息,请参阅 Spring 表达式语言 (SpEL)。IntegrationEvaluationContextFactoryBean
PropertyAccessor
SPEL 函数支持
为了使用静态函数自定义 SPEL,我们引入了该组件。
我们还添加了两个内置函数:和 .
有关更多信息,请参阅 SPEL 函数。EvaluationContext
Method
<spel-function/>
#jsonPath
#xpath
SPEL PropertyAccessors 支持
为了使用实现自定义 SPEL,我们添加了组件。
有关详细信息,请参阅 属性访问器。EvaluationContext
PropertyAccessor
<spel-property-accessors/>
Redis:新组件
我们添加了一个新的基于 Redis 的 MetadataStore
实现。
您可以使用 来维护跨应用程序重启的状态。
此新实现可与适配器一起使用,例如:RedisMetadataStore
MetadataStore
MetadataStore
-
Twitter 入站适配器
-
Feed 入站通道适配器
我们添加了新的基于队列的组件。
我们添加了 and 组件,以分别在 Redis List 上执行 'right pop' 和 'left push' 操作。<int-redis:queue-inbound-channel-adapter/>
<int-redis:queue-outbound-channel-adapter/>
有关更多信息,请参阅“Redis 支持”。
Header Channel Registry
现在,您可以指示框架将回复通道和错误通道存储在注册表中,以便以后解决。
这对于 or 可能丢失的情况(例如,在序列化消息时)非常有用。
有关更多信息,请参阅 Header Enricher 。replyChannel
errorChannel
MongoDB 支持:新增ConfigurableMongoDbMessageStore
除了现有的 之外,我们还引入了新的 .
这为 MongoDB 提供了更强大、更灵活的实现。
它与现有商店不向后兼容,但我们建议将其用于新应用程序。
现有应用程序可以使用它,但旧存储中的消息不可用。
有关更多信息,请参阅 MongoDb 支持。eMongoDbMessageStore
ConfigurableMongoDbMessageStore
MessageStore
Syslog 支持
在 2.2 的基础上,Spring Integration 3.0 引入了专为接收 SYSLOG 消息而定制的入站通道适配器。
有关更多信息,请参阅 Syslog 支持。SyslogToMapTransformer
UDP
TCP
tail
支持
我们添加了文件入站通道适配器,当将行添加到文本文件的末尾时,这些适配器使用命令生成消息。
请参见 'tail'ing 文件。tail
JMX 支持
我们添加了 .
此适配器查询 JMX MBean 树并发送一条消息,其中包含一个有效负载,该有效负载是与查询匹配的对象图。
默认情况下,MBean 映射到基元和简单对象(例如 、 和数组)。
它允许简单地转换为 JSON 等。<int-jmx:tree-polling-channel-adapter/>
Map
List
现在允许使用 属性 配置自定义。IntegrationMBeanExporter
ObjectNamingStrategy
naming-strategy
有关更多信息,请参阅 JMX 支持。
TCP/IP 连接事件和连接管理
TcpConnection
现在,当打开或关闭连接或发生异常时,实例会发出实例(特别是实例)。
此更改允许应用程序使用常规的 Spring 机制通知 TCP 连接的更改。ApplicationEvent
TcpConnectionEvent
ApplicationListener
我们重命名为 .
作为此类的子类的自定义连接可以使用其方法来发布事件。
同样,我们将 .AbstractTcpConnection
TcpConnectionSupport
AbstractTcpConnectionInterceptor
TcpConnectionInterceptorSupport
此外,我们还添加了 .
默认情况下,此适配器将所有实例发送到 .<int-ip:tcp-connection-event-inbound-channel-adapter/>
TcpConnectionEvent
Channel
此外,TCP 连接工厂现在提供了一个名为 的新方法,该方法返回所有打开的连接的标识符列表。
它允许应用程序广播到所有打开的连接,以及其他用途。getOpenConnectionIds()
最后,连接工厂还提供了一个名为 的新方法,它允许应用程序使用其 ID 显式关闭连接。closeConnection(String connectionId)
有关更多信息,请参阅 TCP 连接事件。
入站通道适配器脚本支持
现在支持 using 和 child 元素来创建 .
请参阅通道适配器表达式和脚本。<int:inbound-channel-adapter/>
<expression/>
<script/>
MessageSource
内容扩充器:标头扩充支持
内容扩充器现在为子元素提供配置,以根据来自底层消息流的回复消息使用标头来扩充出站消息。
有关更多信息,请参阅 Payload Enricher。<header/>
一般更改
本节介绍从版本 2.2 到版本 3.0 的一般更改。
消息 ID 生成
以前,消息 ID 是使用 JDK 方法生成的。
在此版本中,默认机制已更改为使用更高效、速度更快的算法。
此外,我们还添加了更改用于生成消息 ID 的策略的功能。
有关更多信息,请参阅消息 ID 生成。UUID.randomUUID()
“<gateway>” 更改
现在,您可以在所有网关方法中设置通用标头,并且我们添加了更多选项,用于向消息添加有关调用了哪个方法的信息。
现在,您可以完全自定义网关方法调用映射到消息的方式。
现在是 public 类。
它允许您以编程方式配置 from Java.GatewayMethodMetadata
GatewayProxyFactoryBean
有关更多信息,请参阅 Messaging Gateway。
HTTP 端点更改
-
出站终端节点
encode-uri
:,现在提供一个属性,以允许在发送请求之前禁用 URI 对象的编码。<http:outbound-gateway/>
<http:outbound-channel-adapter/>
encode-uri
-
Inbound Endpoint
merge-with-default-converters
: 现在有一个属性,用于在自定义消息转换器之后包含默认实例列表。<http:inbound-gateway/>
<http:inbound-channel-adapter/>
merge-with-default-converters
HttpMessageConverter
-
If-Modified-Since
和If-Unmodified-Since
HTTP 标头:以前,在 . 现在,除了纠正该问题外,还为接受日期时间值的任何 HTTP 标头提供从格式化字符串进行日期分析的功能。If-Modified-Since
If-Unmodified-Since
DefaultHttpHeaderMapper
DefaultHttpHeaderMapper
-
入站终端节点表达式变量:除了现有的 和 、 和 现在还支持其他有用的变量:、 、 和 。 这些变量在有效负载和标头表达式中均可用。
#requestParams
#pathVariables
<http:inbound-gateway/>
<http:inbound-channel-adapter/>
#matrixVariables
#requestAttributes
#requestHeaders
#cookies
-
出站终端节点 'uri-variables-expression':HTTP 出站终端节点现在支持指定属性以评估 URL 模板中的所有 URI 变量占位符。 这允许根据传出消息选择不同的表达式映射。
uri-variables-expression
Expression
Map
有关更多信息,请参阅 HTTP 支持。
Jackson 支持 (JSON)
-
引入了 JSON 转换的新抽象。 目前提供了 Jackson 1.x 和 Jackson 2 的实现,版本由 Classpath 中的存在决定。 以前,仅支持 Jackson 1.x。
-
现在发出/使用包含类型信息的标头。
ObjectToJsonTransformer
JsonToObjectTransformer
有关详细信息,请参阅 Transformer 中的“JSON 转换器”。
Chain Elements 属性id
以前,a 中元素的属性被忽略,在某些情况下是不允许的。
现在,该属性允许用于 .
链元素的 bean 名称是周围链和元素本身的 的组合。
例如:'myChain$child.myTransformer.handler'。
有关更多信息,请参阅消息处理程序链。id
<chain>
id
<chain>
id
id
聚合器 'empty-group-min-timeout' 属性
它提供了一个新属性,该属性称为允许空组过期按比过期的部分组更长的计划运行。
空组不会从 中删除,直到它们至少在此毫秒数内未被修改。
有关更多信息,请参阅使用 XML 配置聚合器。AbstractCorrelatingMessageHandler
empty-group-min-timeout
MessageStore
永久文件列表过滤器 (file, (S)FTP)
使用持久化的新实现现已推出。
您可以使用这些来防止在系统重新启动后出现重复文件。
有关更多信息,请参阅读取文件、FTP 入站通道适配器和 SFTP 入站通道适配器。FileListFilter
MetadataStore
Direct Channel Load Balancing 配置
以前,在通道的子元素上进行配置时,唯一可用的选项是使用预定义的值枚举,该枚举不允许开发人员设置自定义实现。
现在,您可以使用 来提供对 .
有关更多信息,请参阅 DirectChannel
。LoadBalancingStrategy
dispatcher
LoadBalancingStrategy
load-balancer-ref
LoadBalancingStrategy
PublishSubscribeChannel 行为
以前,发送到没有订阅者的 <publish-subscribe-channel/> 会返回结果。
如果与 a 结合使用,则会导致引发异常。
现在,它有一个名为 (default: ) 的属性。
如果消息至少发送给最小数量的订阅者,则 send 操作被视为成功(即使该数字为零)。
如果应用程序希望在这些情况下收到异常,请将最小订户数设置为至少 1。false
MessagingTemplate
PublishSubscribeChannel
minSubscribers
0
FTP、SFTP 和 FTPS 更改
默认情况下,FTP、SFTP 和 FTPS 终端节点不再缓存会话。
我们从所有端点中删除了 deprecated 属性。
以前,由此属性的值控制的嵌入式缓存机制不提供限制缓存大小的方法,缓存大小可以无限增长。
版本 2.1 引入了 ,它成为缓存会话的首选(现在是唯一的)方法。cached-sessions
CachingConnectionFactory
CachingConnectionFactory
现在提供了一个新方法: .
此方法会立即关闭空闲会话,并导致正在使用的会话在返回到缓存时关闭。resetCache()
现在,(与 一起)支持通过单个 SSH 连接(仅限 SFTP)进行多路复用通道。DefaultSftpSessionFactory
CachingSessionFactory
FTP、SFTP 和 FTPS 入站适配器
以前,无法覆盖用于处理从远程服务器检索的文件的默认过滤器。
该属性确定要检索哪些文件,但 使用 .
这意味着,如果使用与以前复制的文件同名检索文件的新副本,则不会从适配器发送任何消息。filter
FileReadingMessageSource
AcceptOnceFileListFilter
在此版本中,新属性允许您覆盖默认过滤器(例如,使用或其他自定义过滤器)。local-filter
AcceptAllFileListFilter
如果您希望在 JVM 执行之间保持 的行为,您现在可以配置一个自定义过滤器来保留状态,可能在文件系统上。AcceptOnceFileListFilter
入站通道适配器现在支持该属性,该属性将本地文件修改的时间戳设置为来自服务器的时间戳(默认值:)。preserve-timestamp
false
FTP、SFTP 和 FTPS 网关
网关现在支持该命令,从而启用远程文件的重命名。mv
网关现在支持递归和命令,从而支持检索远程文件树。ls
mget
网关现在支持 and commands,允许将文件发送到远程服务器。put
mput
现在支持该属性,从而在检索期间启用本地文件的命名。
默认情况下,使用与远程文件相同的名称。local-filename-generator-expression
现在支持该属性,从而在检索期间(基于远程目录)启用本地目录的命名。local-directory-expression
远程文件模板
在 FTP 和 SFTP 模块使用的实现上提供了新的更高级别的抽象 ()。
虽然它由终端节点在内部使用,但您也可以以编程方式使用此抽象。
像所有 Spring 实现一样,它可靠地关闭底层 session,同时允许对 session 进行低级访问。RemoteFileTemplate
Session
*Template
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
出站网关的 'requires-reply' 属性
所有出站网关(例如 or )都是为“请求-回复”场景设计的。
响应应来自外部服务,并发布到 或 消息标头。
但是,在某些情况下,外部系统可能并不总是返回结果(例如,
a 当 SELECT 以空或单向 Web 服务结尾时)。
因此,开发人员需要一个选项来配置是否需要回复。
为此,我们引入了出站网关组件的属性。
在大多数情况下,的默认值为 。
如果没有结果,则抛出 a。
将该值更改为意味着,如果外部服务未返回任何内容,则消息流将在该点结束,类似于出站通道适配器。<jdbc:outbound-gateway/>
<jms:outbound-gateway/>
reply-channel
replyChannel
<jdbc:outbound-gateway/>
ResultSet
requires-reply
requires-reply
true
ReplyRequiredException
false
WebService 出站网关具有一个名为 的附加属性。
它用于将空响应视为未收到响应。
默认情况下,它是 ,但您可以将其设置为允许应用程序在回复消息负载中接收空。
当 attribute 为 时,空字符串将被视为 no response for the attribute 。
默认情况下,对于 WebService 出站网关,为 false。ignore-empty-responses String true false String true requires-reply requires-reply |
请注意,该属性以前存在,但在 中设置为 ,并且无法使用 XML 命名空间在出站网关上配置它。requiresReply
false
AbstractReplyProducingMessageHandler
以前,未收到回复的网关将静默结束流(带有 DEBUG 日志消息)。
默认情况下,通过此更改,大多数网关现在都会引发异常。
要恢复到之前的行为,请设置为 。requires-reply false |
AMQP 出站网关标头映射
以前,<int-amqp:outbound-gateway/> 在调用消息转换器之前映射了标头,并且转换器可以覆盖诸如 .
出站适配器在转换后映射 headers,这意味着使用来自 outbound (如果存在) 的 headers。content-type
content-type
Message
从此版本开始,网关现在在消息转换后映射标头,与适配器一致。
如果您的应用程序依赖于以前的行为(其中转换器的 Headers 覆盖了映射的 Headers),则需要筛选这些 Headers(在消息到达网关之前)或适当地设置它们。
受 are 和 影响的标头。
自定义消息转换器可以设置其他标头。SimpleMessageConverter
content-type
content-encoding
存储过程组件改进
对于标准方法不支持的更复杂的数据库特定类型,我们使用 OUT-direction 为元素引入了两个新的附加属性:CallableStatement.getObject
<sql-parameter-definition/>
-
type-name
-
return-type
存储过程入站通道适配器子元素的属性现在支持对 Bean 定义的引用。
以前,它仅包含类名(仍受支持)。row-mapper
<returning-resultset/>
RowMapper
有关详细信息,请参阅存储过程。
Web 服务出站 URI 配置
Web 服务出站网关“uri”属性现在支持替换 Spring Web 服务支持的所有 URI 方案。
有关更多信息,请参阅出站 URI 配置。<uri-variable/>
Redis 适配器更改
Redis 入站通道适配器现在可以使用属性的值,原始数据是消息负载。null
serializer
Redis 出站通道适配器现在具有用于确定运行时的 Redis 主题的属性。topic-expression
Message
Redis 入站通道适配器除了 existing 属性外,现在还具有该属性。topics
topic-patterns
有关更多信息,请参阅 Redis 支持。
Advising Filters
以前,当 a 具有 时,丢弃操作全部在通知链的范围内执行(包括 上的任何下游流)。
filter 元素现在具有一个名为 (default: ) 的属性,以允许在通知链完成后执行 discard 操作。
请参阅 Advice Filters。<filter/>
<request-handler-advice-chain/>
discard-channel
discard-within-advice
true
使用注释为终端节点提供建议
现在可以使用 annotation 配置请求处理程序通知链。 请参阅使用注释通知终端节点。
ObjectToStringTransformer 改进
此转换器现在可以正确地转换和有效负载。
有关更多信息,请参阅 Transformer。byte[]
char[]
String
JPA 支持更改
要保留或合并的有效负载现在可以是 类型。java.lang.Iterable
在这种情况下,返回的每个对象都被视为一个实体,并使用基础 .
迭代器返回的 Null 值将被忽略。Iterable
EntityManager
JPA 适配器现在具有其他属性,可以在执行持久性操作后选择性地从关联的持久性上下文中刷新和清除实体。
检索网关没有指定要检索的第一条记录的机制,这是一种常见的使用案例。
检索网关现在支持通过向网关定义添加 and 属性来指定此参数。
有关更多信息,请参阅检索出站网关。first-result
first-result-expression
JPA 检索网关和入站适配器现在具有一个属性,用于以表达式的形式指定结果集中的最大结果数。
此外,我们还引入了 replace 属性,该属性已弃用。 和 用于提供最大结果数,或用于分别计算结果集中的最大结果数的表达式。max-results
max-number-of-results
max-results
max-results-expression
有关更多信息,请参阅 JPA 支持。
延时器:延迟表达式
以前,它提供了一个属性来确定运行时的延迟值。
在复杂情况下,the 前面必须有 .
Spring Integration 3.0 引入了用于动态延迟确定的属性和子元素。
该属性现已弃用,因为您可以在 .
此外,我们还引入了 来控制表达式计算失败时的行为。
有关更多信息,请参阅延迟器。<delayer>
delay-header-name
<delayer>
<header-enricher>
expression
expression
delay-header-name
expression
ignore-expression-failures
JDBC 消息存储改进
Spring 集成 3.0 为 MySQL 版本 5.6.4 及更高版本添加了一组新的 DDL 脚本。 现在 MySQL 支持小数秒,因此在从基于 MySQL 的消息存储轮询时改进了 FIFO 排序。 有关更多信息,请参阅通用 JDBC 消息存储。
IMAP 空闲连接异常
以前,如果 IMAP 空闲连接失败,则会记录该连接,但没有通知应用程序的机制。
此类异常现在会生成实例。
应用程序可以通过使用配置为接收 (或其超类之一) 的 或 any 来获取这些事件。ApplicationEvent
<int-event:inbound-channel-adapter>
ApplicationListener
ImapIdleExceptionEvent
消息标头和 TCP
TCP 连接工厂现在支持配置灵活的机制,以通过 TCP 传输选定的标头(以及有效负载)。
new 启用标头的选择,您需要配置适当的序列化程序或反序列化程序以将结果写入 TCP 流。
我们添加了一个方便的机制,用于通过 TCP 传输标头和有效负载。
有关更多信息,请参阅传输标头。TcpMessageMapper
Map
MapJsonSerializer
JMS 消息驱动通道适配器
以前,在配置 时,如果您希望使用特定的 ,则必须声明一个容器 Bean 并通过设置属性将其提供给适配器。
我们添加了 ,让它直接在适配器上设置。
这是对其他几个已可用的容器属性的补充。<message-driven-channel-adapter/>
TaskExecutor
container
task-executor
XsltPayloadTransformer
现在,您可以通过设置属性来指定 transformer 工厂类名称。
看。transformer-factory-class
XsltPayloadTransformer
2.1 和 2.2 之间的更改
新组件
版本 2.2 添加了许多新组件。
RedisStore
入站和出站通道适配器
Spring 集成现在具有入站和出站通道适配器,允许您向 Redis 集合写入和读取有效负载。
有关更多信息,请参阅 RedisStore 出站通道适配器和 Redis Store 入站通道适配器。RedisStore
Message
MongoDB 入站和出站通道适配器
Spring 集成现在具有 MongoDB 入站和出站通道适配器,允许您向 MongoDB 文档存储写入和读取有效负载。
有关更多信息,请参阅 MongoDB 出站通道适配器和 MongoDB 入站通道适配器。Message
一般更改
本节介绍从版本 2.1 到版本 2.2 的一般更改。
向终端节点添加行为
向 poller 添加 an 的功能已经存在了一段时间。
但是,由此添加的行为会影响整个集成流程。
它没有解决向单个终端节点添加(例如)重试的功能。
2.2 版本引入了许多终端节点。<advice-chain/>
<request-handler-advice-chain/>
此外,为此,我们添加了三个标准建议类:
-
MessageHandlerRetryAdvice
-
MessageHandlerCircuitBreakerAdvice
-
ExpressionEvaluatingMessageHandlerAdvice
有关更多信息,请参阅向终端节点添加行为。
事务同步和伪事务
Poller 现在可以参与 Spring 的 Transaction Synchronization 功能。 这允许同步诸如通过入站通道适配器重命名文件之类的操作,具体取决于事务是提交还是回滚。
此外,您可以在不存在 “真实” 交易时通过 .PseudoTransactionManager
有关更多信息,请参阅事务同步。
文件适配器:改进的文件覆盖和附加处理
使用文件出站通道适配器或文件出站网关时,可以使用新属性。
在 Spring Integration 2.2 之前,目标文件在存在时被替换。
现在,您可以指定以下选项:mode
-
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 查询提供更具可扩展性的解决方案。 有关更多信息,请参阅支持消息通道。
有序关机
我们添加了一个名为 .
它允许以有序的方式关闭 Spring 集成应用程序,不允许新的入站消息发送到某些适配器,并等待一段时间以允许正在进行的消息完成。stopActiveComponents()
IntegrationMBeanExporter
ObjectToJsonTransformer
默认情况下,现在将标头设置为 .
有关更多信息,请参阅 Transformer。ObjectToJsonTransformer
content-type
application/json
HTTP 支持
默认情况下,不再启用基于 HTTP 的 Java 序列化。
以前,在对象上设置 an 时,标题未正确设置。
我们更新了 以将标头设置为 .
但是,由于这可能会导致与现有应用程序不兼容,因此我们决定不再自动将此转换器添加到 HTTP 端点。expected-response-type
Serializable
Accept
SerializingHttpMessageConverter
Accept
application/x-java-serialized-object
如果您希望使用 Java 序列化,则需要使用 attribute (当您使用 XML configuration 时) 或使用 method (在 Java 中) 将 the 添加到相应的端点。SerializingHttpMessageConverter
message-converters
setMessageConverters()
或者,您可能希望考虑改用 JSON。
它是通过在 Classpath 上启用的。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 集成还提供了一个点对点的消息通道和一个发布-订阅消息通道,这两者都由 AMQP 交换和队列支持。
有关更多详细信息,请参阅 AMQP 支持。
Redis 支持
从版本 2.1 开始, Spring 集成通过提供基于 Redis 的发布-订阅消息传递适配器来支持 Redis,这是一种高级键值存储。MessageStore
有关更多详细信息,请参阅 Redis 支持。
支持 Spring 的 Resource 抽象
在版本 2.1 中,我们引入了一个新的资源入站通道适配器,它建立在 Spring 的资源抽象之上,以支持各种实际类型的底层资源(例如文件、URL 或 Classpath 资源)的更大灵活性。 因此,它与文件入站通道适配器类似,但比文件入站通道适配器更通用。
有关更多详细信息,请参阅 Resource Inbound Channel Adapter。
存储过程组件
在 Spring Integration 2.1 中,该模块还通过添加几个新组件(包括入站和出站通道适配器以及出站网关)来提供存储过程支持。
存储过程支持利用了 Spring 的 SimpleJdbcCall
类,因此支持以下存储过程:JDBC
-
阿帕奇德比
-
DB2
-
MySQL (MySQL的
-
Microsoft SQL 服务器
-
神谕
-
PostgreSQL 数据库
-
Sybase
存储过程组件还支持以下数据库的 SQL 函数:
-
MySQL (MySQL的
-
Microsoft SQL 服务器
-
神谕
-
PostgreSQL 数据库
有关详细信息,请参阅存储过程。
XPath 和 XML 验证过滤器
Spring 集成 2.1 提供了一个基于 XPath 的新消息过滤器。
它是模块的一部分。
XPath 筛选器允许您使用 XPath 表达式筛选消息。
我们还添加了 XML 验证筛选器的文档。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 定义了两个与调度相关的新策略: 和 .
Spring 集成(使用大量调度)现在建立在这些基础上。
事实上, Spring Integration 1.0 最初定义了一些组件(例如 ),这些组件现在已经迁移到 Spring 3.0 的核心 API 中。
现在,你可以从整个应用程序上下文中重用相同的组件中受益(不仅仅是 Spring 集成配置)。
我们还通过提供用于直接配置速率、延迟、cron 表达式和触发器引用的属性,大大简化了 Spring 集成 Poller 的配置。
有关示例配置,请参阅 Channel Adapter 。TaskScheduler
Trigger
CronTrigger
RestTemplate
和HttpMessageConverter
我们的出站 HTTP 适配器现在委托给 Spring 来执行 HTTP 请求并处理其响应。
这也意味着您可以重用任何自定义实现。
有关更多详细信息,请参阅 HTTP 出站组件。RestTemplate
HttpMessageConverter
企业集成模式添加
同样在 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 支持。
映射转换器
这些对称转换器将有效负载对象与对象相互转换。
有关更多详细信息,请参阅 Transformer 。Map
JSON 转换器
这些对称转换器将有效负载对象与 JSON 相互转换。 有关更多详细信息,请参阅 Transformer 。
序列化转换器
这些对称转换器将有效负载对象与字节数组相互转换。 它们还支持 Spring 3.0.5 添加的 serializer 和 deserializer 策略接口。 有关更多详细信息,请参阅 Transformer 。
框架重构
核心 API 经过了一些重大的重构,使其更简单、更可用。
尽管我们预计对开发人员的影响应该很小,但您应该通读本文档以了解更改的内容。
具体来说,您应该阅读 Dynamic Routers、Messaging Gateways、HTTP Outbound Components、Message 和 Aggregator。
如果您直接依赖某些核心组件(、、、 和其他组件),则需要更新任何 import 语句。
我们重组了一些打包,以提供扩展领域模型所需的灵活性,同时避免任何循环依赖(这是框架的政策,以避免这种 “纠结”)。Message
MessageHeaders
MessageChannel
MessageBuilder
新的源代码控制管理和构建基础设施
在 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 中下载它。