Spring Integration Java DSL 1.1 M2 版本可用

发布 | Artem Bilan | 2015年9月10日 | ...

我们高兴地宣布,Spring Integration Java DSL 的 Milestone 2 版本现已从Milestone 仓库提供下载。

Gradle 用户请使用:

compile "org.springframework.integration:spring-integration-java-dsl:1.1.0.M2"

Maven 用户请使用:

<dependency>
     <groupId>org.springframework.integration</groupId>
     <artifactId>spring-integration-java-dsl</artifactId>
     <version>1.1.0.M2</version>
</dependency>

Milestone 1以来,新功能并不多,但以下是最重要的几点需要注意的地方:

Spring Integration 4.2 基础

Spring Integration Java DSL 1.1 现在基于Spring Integration 4.2,并将成为即将发布的Spring IO 2.0 的一部分。1.1 版本的 Java DSL 不再兼容 Spring Integration 4.1.x。

Spring Integration Kafka 1.2.x 升级

我们现在为 Spring Integration Kafka 适配器提供Kafka命名空间工厂。新的 Spring Integration Kafka 1.2 版本 以及 Apache Kafka 0.8.2 的升级带来了一些重大更改。因此,这个 1.1 的 Java DSL Milestone 2 版本不再兼容之前的 Spring Integration Kafka 和 Apache Kafka 版本。

HTTP 命名空间工厂

Spring Integration HTTP 适配器现在已包含其特定的Http命名空间工厂。请参考我们基于 Java DSL 的经典 HTTP 代理示例。

@Bean
public IntegrationFlow httpProxyFlow() {
    return IntegrationFlows
        .from((MessagingGateways g) ->
               g.httpGateway("/proxy")
                     .requestMapping(r -> r.params("name"))
                     .payloadFunction(httpEntity ->
                           ((ServletRequestAttributes) RequestContextHolder
                                                     .currentRequestAttributes())
						.getRequest()
						.getQueryString()))
        .handleWithAdapter(a ->
              a.httpGateway(m ->
                   String.format("http://target/service?%s", m.getPayload()))
                              .expectedResponseType(String.class))
        .get();
}

响应式流支持

我们高兴地宣布,Spring Integration 正在开始提供与响应式流的集成,并且直接在 Java DSL 中提供了对Publisher的支持。

@Bean
public Publisher<Message<String>> reactiveFlow() {
	return IntegrationFlows
		.from(() -> new GenericMessage<>("a,b,c,d,e,f"))
		.split(String.class, p -> p.split(","))
		.toReactivePublisher();
}

正如您所看到的,从 Spring Integration 世界转向响应式流世界非常简单。org.reactivestreams.Publisher bean 之后可以用作响应式程序的事件源,例如使用Project Reactor 实现。

@Autowired
@Qualifier("reactiveFlow")
private Publisher<Message<String>> publisher;
....
List<String> results = new ArrayList<>();
CountDownLatch latch = new CountDownLatch(6);
Streams.wrap(this.publisher)
	.map(m -> m.getPayload().toUpperCase())
	.consume(p -> {
			results.add(p);
			latch.countDown();
		});

另一个方向——从响应式流到 Spring Integration——也很简单(从 Reactor 的角度来看)。

.consume(v -> messagingTemplate().convertAndSend(reactorStreamResult(), v));

我们将在未来的版本中考虑为MessageChannel实现添加一些org.reactivestreams.Subscriber选项。

其他更改

为了使 DSL 更流畅、更方便和更灵活,我们还进行了一些重要的重构和弃用,例如:

  • FileSplitter组件的Files.splitter()工厂方法;
  • 用于新的MessageSessionCallback(S)Ftp.outboundGateway()(Spring Integration 4.2 的功能);
  • 重构和改进的.aggregate().resequence()EIP 方法等。

##SpringOne 2GX 2015 即将到来!在下周于华盛顿特区的SpringOne2GX预订您的席位。这是了解所有最新进展并提供直接反馈的最佳机会。

参加我的演讲,直接了解 Spring Integration Java DSL 的更多信息,并帮助我改进这个框架!

项目页面 | JIRA | 问题 | [贡献] (https://github.com/spring-projects/spring-integration/blob/master/CONTRIBUTING.md) | StackOverflowspring-integration标签)

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部