Spring Integration 4.1 RC1 发布

发布 | Artem Bilan | 2014年10月27日 | ...

亲爱的Spring社区:

我们高兴地宣布Spring Integration 4.1发行候选版本现已推出。请使用Maven或Gradle的里程碑仓库,或下载发行版归档文件进行体验。

此版本包含许多新功能和改进,以及许多错误修复。GA版本计划于11月初发布。

首先,感谢所有为4.1里程碑1提供反馈并提交报告(错误或新功能)的人。特别感谢那些通过Pull Requests提供贡献的人。以下是自里程碑版本以来主要更改的摘要:

WebSockets支持

此功能在4.1里程碑1中引入,但已解决几个问题,我们现在提供了一些示例来更好地理解如何在Spring Integration应用程序中使用WebSockets:基本示例STOMP聊天示例

JDK8 Optional<?>一致处理

如果您使用Java 8,则可以对服务方法参数使用Optional<?>容器。例如:

public void optionals(@Payload("@myConvert.conv(payload)") Optional<Bar> payload,
        @Header(value="foo") Optional<String> header)

在这种情况下,如果@myConvert.conv(payload)返回null,则payload变量将包含Optional.empty()header变量也一样——如果请求Message<?>中没有foo头。

路由单模式

现在支持路由单模式。我们没有使用简单的通道名称静态列表,而是引入了RoutingSlipRouteStrategy,它根据请求Message<?>回复对象提供动态运行时路由。也支持SpEL。

<header-enricher input-channel="input" output-channel="process">
	<routing-slip value="channel1; request.headers[myRoutingSlipChannel];
	                        routingSlipRoutingStrategy;"/>
</header-enricher>

此模式在复杂、动态的情况下非常有用,在这种情况下,配置多个路由器以确定消息流可能会变得很困难。通过此增强功能,当消息到达没有output-channel的端点时,将查阅路由单以确定将消息发送到的下一个通道。当路由单用尽时,正常的replyChannel处理将恢复。

幂等接收器模式

在此版本中,我们已将幂等接收器实现为一等公民特性。以前,用户必须通过例如在<filter/>中使用自定义MessageSelector来实现此模式。框架现在支持此功能作为一个可以应用于任何消费端点的Advice组件。

<idempotent-receiver endpoint="endpoint1, foo*"
				     metadata-store="store"
					 discard-channel="duplicates"
					 key-expression="payload.invoiceNumber"/>

这将创建一个AOP IdempotentReceiverInterceptor,该拦截器应用于MessageHandler#handleMessage,其中端点的id与提供的endpoint模式之一匹配。

如果省略discard-channel,重复消息仍将发送到消息处理程序,但它将包含一个duplicateMessage头,允许用户代码采取进一步的操作。

对于JavaConfig,提供了@IdempotentReceiver注解,但是也必须配置IdempotentReceiverInterceptor @Bean

@Bean
public IdempotentReceiverInterceptor idempotentReceiverInterceptor() {
   return new IdempotentReceiverInterceptor(new MetadataStoreSelector(m ->
                                                    m.getPayload().toString()));
}

@Bean
@ServiceActivator(inputChannel = "input", outputChannel = "output")
@IdempotentReceiver("idempotentReceiverInterceptor")
public MessageHandler myService() {
	....
}

有关更多信息,请阅读IdempotentReceiverInterceptor的JavaDoc。

分散-收集模式

现在提供了分散-收集企业集成模式。

<!--Auction scenario-->
<scatter-gather input-channel="inputAuction" output-channel="output"
                scatter-channel="auctionChannel">
	<gatherer release-strategy-expression="^[payload gt 5] != null or size() == 3"/>
</scatter-gather>

<!--Distribution scenario-->
<scatter-gather input-channel="inputDistribution" output-channel="output"
                gather-channel="gatherChannel">
	<scatterer apply-sequence="true">
		<recipient channel="distribution1Channel"/>
		<recipient channel="distribution2Channel"/>
		<recipient channel="distribution3Channel"/>
	</scatterer>
	<gatherer release-strategy-expression="^[payload gt 5] != null or size() == 3"/>
</scatter-gather>

这是一个复合端点,它结合了发布-订阅逻辑和一个聚合函数。当然,它以前可以作为集成流实现,使用现有的publish-subscribe-channelrecipient-list-router以及一个aggregator组件,但是这个新功能为诸如最佳报价之类的场景提供了更简洁的实现。

Redis队列网关

基于Redis列表的一对请求-回复(入站和出站)网关组件已添加到Redis模块。

<int-redis:queue-outbound-gateway request-channel="sendChannel" queue="foo"/>

<int-redis:queue-inbound-gateway request-channel="requestChannel" queue="foo"/>

Reactor的持久队列

QueueChannel已更改为允许注入任何Queue<?>实现。这样做是为了允许在[Reactor] (http://reactor.github.io/reactor/)项目中使用Chronicle-Queue实现。

@Bean QueueChannel queueChannel() {
   return new QueueChannel(new PersistentQueueSpec<Message<?>>()
                           		.codec(new JavaSerializationCodec<>())
                           		.basePath("/usr/queuePath")
                           		.get());
}

跳过轮询

使用轮询端点时,有时需要“跳过”轮询,可能是因为某些下游条件可能会导致失败,或者任务执行程序池没有可用的线程。此版本添加了PollSkipAdvice,可以将其插入轮询程序的advice链中,跳过逻辑基于用户提供的代码。

备注

  1. Spring Integration 4.1 需要 Spring Framework 4.1
  2. 虽然现在需要JDK8来**构建**Spring Integration,但该框架在运行时仍然与Java 6兼容。
  3. 我们预计本周晚些时候将宣布Spring Integration Java DSL发行候选版本的可用性。

结论

请参阅此版本的发行说明项目页面以获取更多信息。有关4.1版本中“新增功能”的完整列表,请参阅参考文档。从早期版本升级的用户应查阅各种迁移指南

与往常一样,我们非常欢迎贡献

获取Spring通讯

通过Spring通讯保持联系

订阅

领先一步

VMware提供培训和认证,以加快您的进步。

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看Spring社区中所有即将举行的活动。

查看全部