Spring Cloud Stream Brooklyn.M1 已发布

发布 | Marius Bogoevici | 2016 年 8 月 26 日 | ...

我代表团队很高兴地宣布 Spring Cloud Stream Brooklyn 发布系列的第一个里程碑版本已发布。Spring Cloud Stream Brooklyn.M1 可在 Spring Cloud StreamSpring 里程碑存储库 中使用,其功能的详细说明可以在 参考文档 中找到。发布说明可在 此处 获取,其中包含有关迁移路径的重要信息。

从单体架构到发布系列

Spring Cloud Stream Brooklyn.M1 继 Spring Cloud Stream 1.0 之后发布。命名方案的变化反映了项目的结构性变化,特别是从核心组件和绑定器实现包含在一起的单体结构转向更去中心化的结构。在新结构中,核心和绑定器实现是独立的项目,具有自己的发布节奏。发布系列 BOM 将发布组件聚合在一起并管理其版本。

这种方法的好处是双重的。一方面,它允许更快地为各个实现添加新功能和修复程序。另一方面,它降低了创建和开发新绑定器的门槛,随着这些绑定器的成熟,它们可以通过简单地添加到发布系列 BOM 中而成为未来发布系列的一部分。最后,对于一个目标是开发微服务的项目来说,本身不成为单体架构是理所当然的!

以下组件是 Brooklyn.M1 发布系列的一部分

  • Spring Cloud Stream 1.1.0.M1(核心组件)
  • Spring Cloud Stream Kafka Binder 1.1.0.M1
  • Spring Cloud Stream Rabbit Binder 1.1.0.M1

让我们看看新版本带来了什么。

新特性

Spring Cloud Stream Brooklyn.M1 为现有组件带来了一些重大升级,并引入了针对编程模型、应用程序互操作性和整体开发人员体验的新功能。

Apache Kafka 0.9 新消费者支持

Apache Kafka Binder 已升级为使用 Kafka 新的消费者库(在 0.9 版中引入),基于 Spring Kafka 1.0.x 和 Spring Integration Kafka 2.0.x,目前支持 Apache Kafka 0.9。使用新的客户端库带来了一些好处

  • 使用 Apache Kafka Binder 的应用程序无需设置 spring.cloud.stream.instanceIndex。新的消费者库将负责将分区分配给属于给定消费者组的所有实例,并在新实例加入或离开时重新平衡 - 这对于在运行时扩展消费者应用程序特别有用。对于希望继续使用静态分区分配方案的用户,我们将在最终版本中支持它(在这种情况下,仍然需要 spring.cloud.stream.instanceIndex)。
  • 支持 使用 SSL 和 Kerberos 的安全客户端

Spring Kafka 和 Spring Integration Kafka 的抽象也将使添加对 Apache Kafka 0.10 的支持变得更容易,并且预计最终版本也将支持 Kafka 0.10。

响应式编程支持(使用 Java 8)

除了 1.0 版中存在的 Spring Integration 应用程序模型和 @StreamListener 之外,此版本还引入了对 响应式 API 的支持,该 API 基于 Project Reactor。此功能需要使用 Java 8。

应用程序可以添加 spring-cloud-stream-reactive 模块作为依赖项,从而可以直接使用响应式类型作为编程抽象。在数据处理的上下文中,函数式和响应式编程模型非常有吸引力,因为响应式组合 API 的声明性和表达性,它让开发人员专注于做什么,而不是怎么做。另一方面,虽然单独处理消息是企业集成的经典范例,但在流处理方面,开发人员还需要考虑处理连续的入站消息流,并描述仅在该上下文中才有意义的操作,例如窗口 - 按时间或计数。

以下是一个用于计算单词的响应式处理器的示例(用于每秒确定过去 5 秒内最流行的标签)。

@StreamListener
@Output(Processor.OUTPUT)
public Flux<WordCount> count (@Input(Processor.Input) Flux<String> flux) {
  return flux.window(ofSeconds(5), ofSeconds(1))
    .flatMap(window ->
      window.groupBy(word -> word)
        .flatMap(group -> group.reduce(0, (count,word) -> count + 1)
          .map(count -> new WordCount(group.key(), count))));
}

此外,使用响应式 API 可以与其他响应式组件集成,例如响应式 Web 控制器。有关 Spring 中即将推出的响应式支持的更全面概述,请观看 Stephane Maldini 和 Rossen Stoyanchev 在 Spring One Platform 2016 大会上的主题演讲,Spring One Platform 上的其他响应式主题演讲,或阅读 Dave Syer 的 博客系列

Avro 序列化和模式演变支持

Spring Cloud Stream Brooklyn.M1 还添加了对 Avro 和模式演变的支持。从此版本开始,应用程序可以包含 spring-cloud-stream-schema 模块,该模块包含使用 Apache Avro 的 MessageConverters

Apache Avro 序列化程序既支持 固定模式,也支持 与模式注册表动态交互。您可以让您的应用程序与模式注册表交互,只需在您的应用程序中添加 @EnableSchemaRegistryClient 并为您的出站通道设置 application/*+avro 内容类型,以便以 Apache Avro 格式发送数据。这样,发布者应用程序将为其发送的消息注册模式,并将有关主题和版本的元数据传递给消费者。基于此,消费者可以从注册表中检索编写器的模式并反序列化它接收到的消息,即使事先不知道该模式。

这是微服务演变的一个重要功能,因为它允许系统中的不同组件升级或更改其模式和数据格式,而不会破坏现有的组件。

此版本包含一个 模式注册表服务器 和一个通用的 模式注册表客户端Confluent 模式注册表 的模式注册表客户端实现也可用。

特别感谢 Vinicius Carvalho 为模式演变支持做出的贡献!

接下来是什么?

在接下来的几周内,我们将继续开发布鲁克林发布列车,目标是生成一个发布候选版本。按照里程碑的惯例,在RC发布之前,预计会有一些API变更。以下是在最终发布之前的一些计划新增功能:

  • 通过简单地将Spring Kafka库替换为1.1版本,添加对Apache Kafka 0.10的支持;
  • 添加对Reactive Bindings的支持(包括反应式生产者和消费者,例如Reactor Kafka项目中引入的那些);
  • 添加对使用Kafka Stream API开发应用程序的支持;

并且,像往常一样,我们欢迎您的反馈:可以在GitHubStack OverflowTwitter上提供。

获取Spring新闻

关注Spring新闻

订阅

领先一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部