Spring Cloud Stream Brooklyn.M1 可用

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

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

从单体到发布列车

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 绑定器 1.1.0.M1
  • Spring Cloud Stream Rabbit 绑定器 1.1.0.M1

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

有什么新功能?

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

Apache Kafka 0.9 新消费者支持

Apache Kafka 绑定器已升级为使用 Kafka 新消费者库(版本 0.9 引入),基于 Spring Kafka 1.0.x 和 Spring Integration Kafka 2.0.x,目前支持 Apache Kafka 0.9。使用新客户端库带来了几个好处:

  • 使用 Apache Kafka 绑定器的应用程序无需设置 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 之外,此版本还引入了基于 Project Reactor响应式 API 支持。此功能需要使用 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 贡献了模式演进支持!

下一步是什么?

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

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

和往常一样,我们欢迎反馈:可以通过 GitHubStack OverflowTwitter

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看所有