Skip to content
0

Reactor - 扩展性

说明

reactor-extra 为满足 reactor-core 用户的更高级需求,提供了一些额外的操作符和工具。

由于这是一个单独的包,使用时需要明确它的依赖:

java
dependencies {
     compile 'io.projectreactor:reactor-core'
     compile 'io.projectreactor.addons:reactor-extra' // 1
}
  1. 添加 reactor-extra 的依赖。参考 获取 Reactor 了解为什么使用 BOM 的情况下不需要指定 version。

TupleUtils 以及函数式接口

在 Java 8 提供的函数式接口基础上,reactor.function 包又提供了一些支持 3 到 8 个值的 FunctionPredicateConsumer

TupleUtils 提供的静态方法可以方便地用于将相应的 Tuple 函数式接口的 lambda 转换为更简单的接口。

这使得我们在使用 Tuple 中各成员的时候更加容易,比如:

java
.map(tuple -> {
  String firstName = tuple.getT1();
  String lastName = tuple.getT2();
  String address = tuple.getT3();

  return new Customer(firstName, lastName, address);
});

可以用下面的方式代替:

java
.map(TupleUtils.function(Customer::new));

因为 Customer 的构造方法符合 Consumer3 的函数式接口标签。

MathFlux 的数学操作符

reactor.math 包的 MathFlux 提供了一些用于数学计算的操作符,如 maxminsumIntaverageDouble

重复与重试工具

reactor.retry 包中有一些能够帮助实现 Flux#repeatWhenFlux#retryWhen 的工具。入口点(entry points)就是 RepeatRetry 接口的工厂方法。

两个接口都可用作可变的构建器(mutative builder),并且相应的实现(implementing) 都可作为 Function 用于对应的操作符。

调度器

Reactor-extra 提供了若干专用的调度器: - ForkJoinPoolScheduler,位于 reactor.scheduler.forkjoin 包; - SwingScheduler,位于 reactor.swing 包; - SwtScheduler,位于 reactor.swing 包。

最近更新