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

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

我很高兴代表 Reactor 团队宣布 reactor-core 3.1.0.RC1 已经发布了 ?。这是本月底发布 3.1 GA 版本(支持 Spring 5 的长期支持版本)的重要一步!

同时发布的还有许多其他版本,它们都捆绑在 Bismuth-M4 发布列车 (Release Train) 和 BOM 中

  • reactor-test, reactor-extra, reactor-adapterreactor-logback 都已发布 3.1.0.RC1 版本
  • reactor-netty 在新的 0.7.0.M2 里程碑版本中进行了重大更新并修复了 bug
  • 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 的第一个里程碑版本以来一直在逐步进行,你可以前往 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)
  • 返回 Tuple 的 Mono.when 静态方法和 Mono#and 现在分别命名为 zipzipWith,与 Flux 中对应的名称保持一致。请注意,whenand 方法在 3.1.0.RC1 中仍然存在,但它们专门用于仅关心多个 Publisher 对象完成的情况(返回类型为 Mono<Void>)。(RC1)
  • Flux#firstEmitting 静态方法现在名为 first,而 Flux#firstEmittingWith 实例方法现在名为 or。(RC1)

更好的操作符一致性

  • 对于接受 companion Publisher 的操作符变体或异步执行与无后缀操作符相同任务的变体,使用 *When 后缀。(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 静态方法一次性触发多个提供的任务并等待它们全部完成
  • Mono 调用 and 方法时,它对单个提供的 Publisher 执行相同的操作
  • then 方法的作用是忽略源的元素,仅传递其完成信号

其他变化

  • reactor-test 的源代码已移至与 reactor-core 相同的仓库,并且该 artifact 现在位于 Maven 的 io.projectreactor groupId 下。(M2)
  • Hooks 是累积的 (M3),并且可以使用 key 进行部分设置/重置 (RC1)
  • WorkQueueProcessorTopicProcessor 有许多构建选项,现在由 Builder 表示。(M2)
  • Reactor 中的 Processor 实现已被大量重构,并且创建了一个 facade Sink 接口,以便于直接与处理器进行交互。使用 Processor#sink() 来获取并保留对该 facade 的引用。(M3)
  • 一个 Flux/Mono 可以用多个 tag 注解或一个 name 注解进行标记。(M3)
  • 现在可以在订阅时使用 subscriberContext(Context)Context 绑定到响应式序列。此上下文会随订阅信号一起向上游传播。(RC1)

未来的方向

接下来的两周将全力准备 GA 版本发布,除文档和一些新操作符外,我们预计不会有其他新的变化。

但这也是你尝试这些变化并提供反馈的最后机会!所以请尽快试用,并通过 GitHubGitter 聊天 向我们提供任何反馈。

愉快的响应式编程!

订阅 Spring 时事通讯

订阅 Spring 时事通讯,保持联系

订阅

先人一步

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

了解更多

获得支持

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

了解更多

近期活动

查看 Spring 社区的所有近期活动。

查看全部