Spring Integration 4.1 里程碑版本 1 发布

发布 | Artem Bilan | 2014年9月5日 | ...

亲爱的 Spring 社区:

我们很高兴地宣布 Spring Integration 4.1 里程碑版本 1 现已发布。请使用 Maven 或 Gradle 的 里程碑版本仓库,下载 发行版归档文件,或查看项目 主页 以获取更新文档和 Maven/Gradle 配置详细信息的链接。

此版本包含一些新功能和进一步改进,以及许多错误修复,GA 版本预计在 10 月底发布。

以下是主要更改的摘要

Spring Framework 4.1

Spring Integration 利用了 Spring Framework 4.1 中的一些新功能,并且需要该版本。

更改包括

  • 将更多 Spring Integration API 迁移到核心 Spring Messaging 模块,并且 Spring Integration 等效项已弃用

或删除以避免目标应用程序中的混淆;

  • Spring Framework 4.1 中包含了许多消息传递性能改进。

  • Spring Framework 4.1 引入了 [SpEL 编译器](http://docs.spring

.io/spring/docs/current/spring-framework-reference/html/expressions.html#expressions-spel-compilation)。这对于 Spring Integration 非常有用,后者在运行时广泛使用 SpEL。您可以使用 spring.expression.compiler.mode 系统属性(值为 IMMEDIATEMIXED)启用 SpEL 编译器。

WebSocket 适配器

已引入 WebSocket 入站和出站通道适配器。它们建立在 Spring WebSocket 和 Messaging 基础之上。

WebSockets 的关键特性之一是它是一种 流式 协议,从 Java 的角度来看,它基于与服务器端和客户端相同的 API,因此,我们可以在双方使用类似的组件构建集成流

服务器端

@Configuration
@EnableIntegration
public class ServerConfig {

	@Bean
	public ServerWebSocketContainer serverWebSocketContainer() {
		return new ServerWebSocketContainer("/ws").withSockJs();
	}

	@Bean
	public MessageProducer webSocketInboundChannelAdapter() {
		WebSocketInboundChannelAdapter webSocketInboundChannelAdapter = 
					new WebSocketInboundChannelAdapter(serverWebSocketContainer());
		webSocketInboundChannelAdapter.setOutputChannel(webSocketInputChannel());
		return webSocketInboundChannelAdapter;
	}

	@Bean
	@Transformer(inputChannel = "webSocketInputChannel", outputChannel = "webSocketOutputChannel")
	public ExpressionEvaluatingTransformer transformer() {
		return new ExpressionEvaluatingTransformer(PARSER.parseExpression("'Hello ' + payload"));
	}

	@Bean
	@ServiceActivator(inputChannel = "webSocketOutputChannel")
	public MessageHandler webSocketOutboundMessageHandler() {
		return new WebSocketOutboundMessageHandler(serverWebSocketContainer());
	}

}

客户端

@Configuration
@EnableIntegration
public class ClientConfig {
	@Bean
	public WebSocketClient webSocketClient() {
		return new SockJsClient(Collections.<Transport>singletonList(
						new WebSocketTransport(new JettyWebSocketClient())));
	}

	@Bean
	public IntegrationWebSocketContainer clientWebSocketContainer() {
		return new ClientWebSocketContainer(webSocketClient(), "ws://host:port/ws");
	}

	@Bean
	public MessageProducer webSocketInboundChannelAdapter() {
		WebSocketInboundChannelAdapter webSocketInboundChannelAdapter =
				new WebSocketInboundChannelAdapter(clientWebSocketContainer());
		webSocketInboundChannelAdapter.setOutputChannel(webSocketInputChannel());
		return webSocketInboundChannelAdapter;
	}

	@Bean
	@ServiceActivator(inputChannel = "webSocketOutputChannel")
	public MessageHandler webSocketOutboundMessageHandler() {
		return new WebSocketOutboundMessageHandler(clientWebSocketContainer());
	}

}

另一种简单的方法是与 Spring WebSockets 和 STOMP 子协议集成,但使用集成流来处理请求和发送响应,是基于 @MessageMapping 注解,但在 @MessagingGateway 接口上

@MessagingGateway
@Controller
public interface WebSocketGateway {

	@MessageMapping("/greeting")
	@SendToUser("/queue/answer")
	@Gateway(requestChannel = "greetingChannel")
	String greeting(String payload);

}

Reactor 支持

已添加 Promise<?> 网关以支持 Project Reactor。现在 Spring Integration 消息流可以用作 Reactive Streams 的一部分

@MessagingGateway(reactorEnvironment = "reactorEnv")
public interface PromiseGateway {

	@Gateway(requestChannel = "promiseChannel")
	Promise<Integer> multiply(Integer value);

}

	    ...

@ServiceActivator(inputChannel = "promiseChannel")
public Integer multiply(Integer value) {
	return value * 2;
}

		...

Streams.defer(Arrays.asList("1", "2", "3", "4", "5"))
	.env(this.environment)
	.get()
	.map(Integer::parseInt)
	.mapMany(integer -> promiseGateway.multiply(integer))
	.collect()
	.consume(integers -> ...)
	.flush();

此外,还添加了对 Spring Framework ListenableFuture<?> 网关方法返回类型的支持。

Boon JSON 映射器

已为 JSON 变换器添加了 Boon JsonObjectMapper 实现。Boon 已被证明具有比 Jackson 更好的 JSON 映射性能。它在 Spring Integration 中通过检测类路径中的 jar 自动启用。

Splitter 迭代器

<splitter> 现在可以返回 Iterator<?>Iterable<?> 作为 payload 以实现 流式 行为,其中每个项目都使用 Iterator.next() 作为回复消息发出。

此外,我们还发布了两个维护版本 3.0.54.0.4。强烈建议升级到最新版本,因为它们包含一些关键修复。

总结

有关更改的完整列表,请参阅 发行说明新增功能 和新组件的 Java 文档

当然,不要错过 迁移指南

我们期待您尽快发表评论和反馈(StackOverflowspring-integration 标签)、Spring JIRA),并在我们发布 GA 之前报告您发现的问题,大约需要几个月时间。

SpringOne 2GX 2014

下周在 SpringOne 上将介绍其中一些主题。请参加 [Gary Russell 的演讲] (https://2014.event.springone2gx.com/schedule/sessions/spring_integration_java_configuration_and_more.html) 以了解有关这些内容以及过去 12 个月添加的其他 Spring Integration 改进的更多信息。

获取 Spring 新闻通讯

与 Spring 新闻通讯保持联系

订阅

抢先一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部