宣布 Reactor Core 3.1 首个发布候选版

发布 | Simon Baslé | 2017 年 9 月 18 日 | ...

我代表 Reactor 团队很高兴地宣布 reactor-core 3.1.0.RC1 已发布 ?. 这是 3.1 版本在月底前正式发布 (GA release) 的最后重要一步,也是将支持 Spring 5 的长期支持版本!

此外,还有一系列相关的版本发布,它们都整合在 Bismuth-M4 Release Train 和 BOM 中

  • reactor-test, reactor-extra, reactor-adapterreactor-logback 都已更新至 3.1.0.RC1
  • reactor-netty 在新的 0.7.0.M2 里程碑版本中有大量更新和错误修复
  • reactor-kafka 已发布其 1.0.0.M4 里程碑版本

要获取此发布版本,最简单的方法是使用 BOM,如参考指南 此处 所述。请务必阅读关于 里程碑版本 的部分(将其视为Bismuth-M4)。

Reactor-Core 中的重要变更

由于自 MILESTONE 1 以来我们没有做太多公告,让我们稍微深入地看看 reactor-core 3.1.0 中的主要变更,这是变更最多的部分。

我们保留了在 3.1.0.RELEASE 之前进行 API 更改的选项,这使我们能够收集来自 社区 和 Spring Framework 团队的宝贵反馈。因此,我们能够完善 API,并提出了一个我们认为 100% 适合与 Spring Framework 5.0 长期搭配的方案。

这些变更自 Reactor 3.1.0 的第一个 MILESTONE 起已逐步进行,您可以前往 GitHub 上的发布说明 查看完整的变更日志,特别是如果您自 3.0.7.RELEASE 以来未曾升级。

以下是这些变更的非详尽概述

Flux 和 Mono API 的更好对齐

  • Mono 和 Flux 的错误处理运算符已调整。(M1)
  • Mono#flatMap 已变为 flatMapMany,而 Mono.then (Mono<V> then(Function<T, Mono<V> other)) 现在是 flatMap。(M1)
  • 返回元组的 Mono.when 静态方法和 Mono#and 现在是 zipzipWith,与其 Flux 对应项一致。请注意,whenand 方法在 3.1.0.RC1 中仍然存在,但它们专门用于仅关心多个 Publisher 对象完成(表示为 Mono<Void> 返回类型)的情况。(RC1)
  • Flux#firstEmitting 静态方法现在称为 first,而 Flux#firstEmittingWith 实例方法现在称为 or。(RC1)

更好的运算符一致性

  • 使用 *When 后缀来表示那些接受一个伴随 Publisher 或执行与其无后缀对应项相同异步任务的运算符。(M1)
  • 所有 delayError 参数变体已被移除,取而代之的是添加一个后缀为 DelayError 的别名(例如 flatMapDelayError)。(M1)
  • 所有 *Millis 变体(接受 long 持续时间)已被移除,取而代之的是基于 Duration 的变体。(M1)

这些变更通常还具有消除使用 lambda 表达式调用方法重载时可能出现的歧义的好处,尤其是在 Kotlin 等语言中。

Mono 特定 API

Mono 有几个处理任务完成的 API。它们基本上会忽略元素(如果有),并且只传播 onComplete 信号。

在 RC1 之前,这些 API 也会有不专注于此任务完成用例的重载,从而引起一些混淆。从 RC1 开始,这些变体都已重命名(例如,Mono<Tuple2> and(Mono<V> other) 已重命名为 zipWith)。

已保留的任务完成导向变体,可以通过它们返回 Mono<Void> 来识别。现在它们可以处理任何 Publisher,而不仅仅是 Mono。

  • when 静态方法同时启动几个提供的任务并等待它们全部完成
  • and 在从 Mono 调用时执行相同操作,使用单个提供的 Publisher
  • then 旨在忽略源的元素,只发出其完成信号

其他变更

  • reactor-test 的源代码已迁移到与 reactor-core 相同的仓库,并且在 Maven 中,该构件现在属于 io.projectreactor 组。(M2)
  • Hooks 现在是累积的(M3),并且可以使用密钥部分设置/重置(RC1)
  • WorkQueueProcessorTopicProcessor 具有许多构造选项,现在由 Builder 表示(M2)
  • Reactor 中的 Processor 实现已进行了大量重构,并创建了一个 Sink 接口作为外观,以简化与处理器的直接交互。请使用 Processor#sink() 来获取并保留对此外观的引用。(M3)
  • Flux/Mono 可以通过多个 tag 注释或一个 name 注释进行标记。(M3)
  • 现在可以在订阅时将 Context 绑定到响应式序列,使用 subscriberContext(Context)。此上下文会沿着订阅信号向上游传播。(RC1)

未来的路

接下来的两周将专注于准备 GA 发布,我们预计除了文档和一些新运算符外,不会有任何新变更。

但这也是您尝试更改并提供反馈的**最后机会**!所以请尽快试用,并给我们任何反馈(在 GitHubGitter 聊天上)

祝您反应式编程愉快!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看所有