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

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

我很高兴地宣布,Spring Integration 的 Java DSL 1.2 M1 现在已经可用!

首先,我要感谢所有创建议题、提交拉取请求、提供反馈或仅在 StackOverflow 上提问的人。没有社区,我们就不会成为今天如此成功的项目!

构件 org.springframework.integration:spring-integration-java-dsl:1.2.0.M1 已在里程碑仓库中可用。所以,试试看吧,并且欢迎在GH 议题中提出任何反馈!

本次迭代的一些亮点

支持 Apache Kafka 0.9

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

运行时流注册

在许多情况下,最好根据系统状态甚至在某些业务功能调用期间指定集成流。甚至可以在执行后使其不稳定。为此,引入了 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 ChannelInterceptor 和作为订阅者的 LoggingHandler 表示。它负责记录进入下一个端点的消息。

.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 版本的更多信息,请参阅提交历史

Bug 修复

维护版本 1.1.3 也已发布,其中包含几个严重的 bug 修复以及与 Spring Integration 4.3 的兼容性。构件 org.springframework.integration:spring-integration-java-dsl:1.1.3.RELEASErepo.spring.ioMaven Central 中可用。建议所有人升级,特别是如果您使用了 JMS 工厂和实现了 ApplicationListener 的 bean。

下一步

我们预计版本 1.2 的下一个 Milestone 2 很快就会发布,大概在几周内,RC 版本和最终发布将在八月中旬左右。同时,我们将把 spring-integration-java-dsl 项目合并到 Spring Integration Core 项目中,使用 5.0 版本和 Java 8 代码库。当前的 1.2 版本仍将受到支持,但仅限于 bug 修复。

项目主页 | 文档 | 议题 | 帮助

订阅 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助力您的职业发展。

了解更多

获取支持

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

了解更多

即将举办的活动

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

查看全部