抢先一步
VMware 提供培训和认证,以加速您的进步。
了解更多亲爱的 Spring 社区:
我们很高兴地宣布 Spring Integration 4.1 里程碑版本 1 现已发布。请使用 Maven 或 Gradle 的 里程碑版本仓库,下载 发行版归档文件,或查看项目 主页 以获取更新文档和 Maven/Gradle 配置详细信息的链接。
此版本包含一些新功能和进一步改进,以及许多错误修复,GA 版本预计在 10 月底发布。
以下是主要更改的摘要
Spring Framework 4.1
Spring Integration 利用了 Spring Framework 4.1 中的一些新功能,并且需要该版本。
更改包括
或删除以避免目标应用程序中的混淆;
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
系统属性(值为 IMMEDIATE
或 MIXED
)启用 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.5 和 4.0.4。强烈建议升级到最新版本,因为它们包含一些关键修复。
总结
有关更改的完整列表,请参阅 发行说明、新增功能 和新组件的 Java 文档。
当然,不要错过 迁移指南。
我们期待您尽快发表评论和反馈(StackOverflow(spring-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 改进的更多信息。