|
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.4.0! |
2.2 和 3.0 之间的变化
新组件
版本 3.0 添加了许多新组件。
HTTP 请求映射
HTTP 模块现在为入站终端节点提供强大的请求映射支持。
我们替换了UriPathHandlerMappingclass 替换为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跟PropertyAccessorimplementations 中,我们添加了<spel-property-accessors/>元件。
有关详细信息,请参阅 属性访问器。
Redis:新组件
我们添加了一个新的基于 Redis 的MetadataStore实现。
您可以使用RedisMetadataStore要维护MetadataStore跨应用程序重启。
这个新的MetadataStoreimplementation 可以与适配器一起使用,例如:
-
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-SinceHTTP 标头:以前,If-Modified-Since和If-Unmodified-SinceHTTP 标头在 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在频道的dispatcherchild 元素,唯一可用的选项是使用预定义的值枚举,这不允许开发人员设置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) 通过SessionFTP 和 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/>子元素现在支持对RowMapperbean 定义。
以前,它仅包含类名(仍受支持)。
有关详细信息,请参阅存储过程。
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 引入了expressionattribute 和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.