Spring Integration 的 Java DSL 1.2 M1 和 1.1.3 版本现已发布

发布 | Artem Bilan | 2016年7月8日 | ...

我很高兴地宣布,Spring Integration 的 Java DSL 1.2 M1 版本现已发布!

首先,我要感谢所有创建问题、提交 Pull Request、提供反馈或在 StackOverflow 上提问的人。如果没有社区,我们不可能取得今天的成功!

工件 org.springframework.integration:spring-integration-java-dsl:1.2.0.M1 可在 Milestone 仓库 中获取。所以,请尝试一下,并且不要犹豫,针对任何反馈提交 GH 问题

当前版本的亮点

Apache Kafka 0.9 支持

基于最近发布的 适用于 Apache Kafka 的 Spring 项目,引入了一个新的 Kafka09 工厂。这是一个简单的 Java DSL 工厂,用于基于 Spring for Apache Kafka 基础生成用于适配器的 IntegrationComponentSpec 流式 API 生成器。为了向后兼容,仍然存在用于 Apache Kafka 0.8 支持的现有 Kafka 工厂。

运行时流注册

在许多情况下,最好根据系统状态甚至在某些业务函数调用期间指定集成流。或者甚至在执行后使其变得不稳定。为此,引入了 IntegrationFlowContext 组件以允许手动 IntegrationFlow 控制。

@Autowired
private IntegrationFlowContext context;
...

IntegrationFlow myFlow = f -> f
  			.<String, String>transform(String::toUpperCase)
   			.transform("Hello, "::concat);

String flowId = this.context.register(myFlow);
MessagingTemplate messagingTemplate = this.context.messagingTemplateFor(flowId);

assertEquals("Hello, SPRING",
            messagingTemplate.convertSendAndReceive("spring", String.class));

this.context.remove(flowId);

有关更多信息,请参阅 IntegrationFlowContext JavaDoc。

操作符 log()

为了方便以 Spring Integration 的方式记录消息旅程(类似于 <logging-channel-adapter>),引入了一个新的 log() 操作符。在底层,它仅由 WireTap ChannelInterceptorLoggingHandler 作为订阅者表示。它负责记录进入下一个端点消息。

.filter(...)
.log(LoggingHandler.Level.ERROR, "test.category", m -> m.getHeaders().getId())
.route(...)

在此示例中,仅针对通过过滤器并路由之前的消息,将 id 头以 ERROR 级别记录到 "test.category" 中。

MessageChannelSpec.wireTap()

MessageChannelSpec 生成器引入了 .wireTap() 流式 API。现在,目标配置从 Java DSL 使用中获得了更多好处。

@Bean
public QueueChannelSpec myChannel() {
    return MessageChannels
            .queue()
            .wireTap("loggingFlow.input");
}

@Bean
public IntegrationFlow loggingFlow() {
    return f -> f.log();
}

类型化路由器

拥有用于 bean 的纯 Java 实例化,确实看起来足够自然,可以将路由键作为任何所需的类型,并避免将所有内容转换为 String。此外,类型宽松允许我们将配置作为泛型感知。

@Bean
public IntegrationFlow payloadTypeRouteFlow() {
    return f -> f
          .<Object, Class>route(Object::getClass, m -> m
                         .channelMapping(String.class, "stringsChannel")
                         .channelMapping(Integer.class, "integersChannel"));
}

有关 1.2.0.M1 版本的更多信息,请参阅 提交历史

错误修复

维护版本 1.1.3 也已发布,其中包含一些严重的错误修复和 Spring Integration 4.3 兼容性。org.springframework.integration:spring-integration-java-dsl:1.1.3.RELEASE 工件可在 repo.spring.ioMaven Central 中获取。建议所有人升级,特别是如果您使用 JMS 工厂和实现 ApplicationListener 的 bean。

后续步骤

我们预计 1.2 版本的下一个里程碑版本 2 将很快发布,大约几周后,并在 8 月中旬发布 RC 和正式版本。同时,我们将把 spring-integration-java-dsl 项目并入 Spring Integration Core 5.0 版本,并使用 Java 8 代码库。当前的 1.2 版本将继续得到支持,但仅限于错误修复。

项目页面 | 文档 | 问题 | 帮助

获取 Spring Newsletter

关注 Spring Newsletter

订阅

领先一步

VMware 提供培训和认证,助您快速提升技能。

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部