Reactor Core 3.0 成为基于 Java 8 的统一响应式基础

发布 | Stephane Maldini | 2016年3月11日 | ...

[更新] 在我们介绍了 Reactor 2.5 之后,我们将版本号转移到 3.0,以便更好地反映所进行的重大重新设计工作。

富有意义的组合 API

原来的 reactor-stream 模块已合并到 Reactor Core 3.0 中。FluxMono 分别代表 0..N0..1 序列类型,现在涵盖了以下类别的广泛操作:

  • 冷到热或多播:publish, publishNext, cache, multicast...
  • 聚合/归约(转换):buffer, reduce, scan, window, sample...
  • 过滤:filter, exists, single...
  • 条件化:timeout, take, takeUntil, skip, skipUntil...
  • 组合:withLatestFrom, combineLatest
  • 背压:onBackpressureDrop, onBackpressureLatest...

尽管这些功能已经存在,但我们现在使用的是超高效的 Reactive Streams Commons 操作符实现。

专为 Java 8 及更高版本设计

所有 Reactor 3.0 项目都已升级到 Java 8。随着 JVM 市场在 Java 8 上趋于标准化,我们认为没有理由进一步推迟我们的过渡。下面列举一些好处:

  • reactor.fn 中所有“回溯移植”的功能回调都已替换为 java.util.function。因此,Reactor 提供了标准的交互契约和具有竞争力的表层 API。
  • Flux 转换为 java.util.stream.Stream,反之亦然
  • Mono 转换为 CompletableFuture,反之亦然
  • Optional 安全地创建 Mono
  • 使用 Duration 提供合理的时段支持
  • 删除了对 ConcurrentHashMap 使用的影子 JSR 166 回溯移植,这尤其影响了 Reactor Addons
  • 向 Spring Framework 5 提供的编程体验迈进了一大步,而 Spring Framework 5 本身也是基于 Java 8 构建的。

一些 Java 8 提取器和生成器的实际应用

java.util.stream.Stream<String> stream = 
    Mono.fromFuture(someCompletableFuture)
        .timeout(Duration.ofSeconds(30))
        .log("hello")
        .flatMap( pojo -> Flux.just(pojo.getId(), pojo.getName())
        .toStream();

Flux.fromStream(stream)
    .delayMillis(1000L)
    .subscribe(System.out::println);

我们以后可能会考虑为 Android 兼容性进行回溯移植,但目前我们的重点是 Java 8 及更高版本的应用。

亮点

-- 借鉴 Reactive4Java, RxJavaReactor 多年经验 -- 高效,真正高效,通过操作融合进一步提升效率 -- 来自 Reactive Streams Commons 的更多性能基准测试

  • 为带队列的操作符提供并发和预取参数
  • Mono 发布-订阅:MonoProcessor<T>
  • 更多测试:结合当前 Reactive Streams Commons (879) 和 Core (1153),以及我们的内部早期采用者,例如 Spring Framework 5 和 Cloud Foundry Java Client。

更多详情请参阅 问题跟踪器

下一步是什么?

通过本次发布,我们奠定了一个基础,我们认为它对库开发者和应用开发者都将非常有用。我们已准备好收集更多反馈,而我们的下一站将是 Reactor IPC:Reactor Aeron 和 Reactor Netty。这两个 Reactor IPC 模块的宏伟计划已经酝酿数月,旨在帮助您跨越网络边界并考虑背压!其两个鼓舞人心的特质与 Reactor Core 相同:专注于 API 和效率,无需额外的仪式或学术背景。

同时,我们正在加倍努力创造各种入门体验,期待更多的博客、指南以及与 Spring Boot 团队的紧密合作,以便让您轻松地触手可及这份卓越。

订阅 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

先人一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部