响应式编程

观察者模式、事件驱动、发布订阅等都可以被归类到响应式编程

要素

传播变化

流的变化 -> 数据/事件 -> 系统实时响应

声明式

规范

Java9 Flow

java.util.concurrent.Flow

RxJava

RxJava基本流程

典型应用1

典型应用2

Flowable.just("hello word").subscribe(System.out::println);

Publisher

Flowable

Observable

一个观察者(Observer)订阅一个可观察对象(Observable)

// 同步
Observable<Integer> observable1 = Observable.just(1, 2, 3);
// 异步
Observable<Object> observable2 = Observable.create(s -> {
    if (new Random().nextBoolean()) {
        s.onNext("kkk");
    }else {
        // 错误处理
        s.onError(new RuntimeException("随机抛个异常"));
    }
});
// operators
observable1
        .map(v -> v + 1)
        .filter(v -> true)
        .subscribe(System.out::println);
observable2.subscribe(System.out::println, t -> System.out.println(t.getMessage()));

Single

它总是只发射一个值,或者一个错误通知,而不是发射一系列的值

Completable

Maybe

Subject

AsyncSubject

BehaviorSubject

PublishSubject

ReplaySubject

Subscriber

Operators

Scheduler

可以指定操作符(或者特定的Observable)在特定的调度器(Scheduler)上执行

https://mcxiaoke.gitbooks.io/rxdocs/content/Scheduler.html

Backpressure

Reactor

组装

不会触发任何实际的调用,用来描述计算组织过程。只有在管道被订阅时,数据流才会开始流动

Flux

Flux操作流程

Mono

与Flux的区别在于Mono只能包含0个或1个元素

SpringWebFlux

Akka

屏幕截图 2021-11-30 220708

ActorRef

ActorPaths

Dispatchers

Akka Streams

原始数据 -> Source -> Flow... -> Sink(最终消费者)

Materialization(物化)

物化过后流才会被执行