Reactor Core 3.1 首个候选版本发布公告

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

我代表 Reactor 团队荣幸地宣布 reactor-core 3.1.0.RC1 已发布 🎉。这是本月底发布 3.1 正式版(长期支持版本,将支持 Spring 5!)的最后一步。

它还包含其他各种版本,所有这些版本都与 Bismuth-M4 版本列车和 BOM 捆绑在一起。

  • reactor-testreactor-extrareactor-adapterreactor-logback 都已发布 3.1.0.RC1 版本。
  • reactor-netty 在新的 0.7.0.M2 里程碑版本中进行了重大更新和错误修复。
  • reactor-kafka 已发布 1.0.0.M4 里程碑版本。

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

Reactor Core 的重要更改

由于自里程碑 1 以来我们没有发布许多公告,让我们更深入地了解 `reactor-core` 3.1.0 中的主要更改,它变化最大。

我们将 API 更改的选项保留到 3.1.0.RELEASE,这使我们能够从我们的 社区 和 Spring Framework 团队收集宝贵的反馈。因此,我们能够改进 API,并最终得到我们认为完全适合与 Spring Framework 5.0 长期共存的方案。

这些更改自 Reactor 3.1.0 的第一个里程碑以来一直在逐步进行,您可以访问 GitHub 上的发布说明 以获取完整的变更日志,特别是如果您自 `3.0.7.RELEASE` 以来没有进行任何升级。

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

Flux 和 Mono API 的更好对齐

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

更好的操作符一致性

  • 对于采用伴随 `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` 一起使用,而不仅仅是 Monos。

  • `when` 静态方法同时触发多个提供的任务并等待所有任务完成。
  • `and` 从 `Mono` 调用时,使用单个提供的 `Publisher` 执行相同的操作。
  • `then` 用于忽略源的元素,只发出其完成信号。

其他更改

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

接下来的路

接下来的两周将完全致力于准备正式版发布,我们预计除了文档和一些新的操作符外不会有任何新的更改。

但这也是您尝试这些更改并提供反馈的**最后机会**!因此,请尽快尝试一下,并随时向我们提供您可能遇到的任何反馈(在 GitHub 上或通过 Gitter 聊天)。

祝您响应式编程愉快!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部