reactive streams-响应式流
·
前言
响应式流的网址是Reactive Streams。官方给出的目标是:
响应性流是为异步流处理提供无阻塞回压的标准。这包括针对运行时环境(JVM和JavaScript)以及网络协议的工作。
目前,JDK给出了java.util.concurrent.Flow接口来进行响应式编程。但是由于完全更新到JDK9还需要一段时间,所以需要开源的版本支持。
响应式流规范
响应式流给出一套接口规范,gradle地址是:
implementation 'org.reactivestreams:reactive-streams:1.0.3'
这套规范定义了四个接口,分别是:
org.reactivestreams.Publisher<T>:发布者,发布数据。org.reactivestreams.Subscriber<T>:订阅者,订阅数据。org.reactivestreams.Subscription<T>:订阅,订阅者订阅发布者的一对一生命周期。org.reactivestreams.Processor<T>:处理器,既能够发布数据,又能接收数据。
以上,就是响应式流的全部接口,和JDK9的Flow API对应。
ReactiveX实现
ReactiveX是这套规范的实现之一,更多详情参考官网。目前已经升级到第三个大版本RxJava 3,包含下面几个主要类:
- io.reactivex.rxjava3.core.Flowable: 0…N个流,支持反应流和回压
- io.reactivex.rxjava3.core.Observable: 0…N个流,没有回压
- io.reactivex.rxjava3.core.Single: 1个流
- io.reactivex.rxjava3.core.Completable: 0个流
- io.reactivex.rxjava3.core.Maybe: 0或1个流
Publisher
其中,只有io.reactivex.rxjava3.core.Flowable实现了org.reactivestreams.Publisher<T>接口,其他四种流类型没有实现。
Processor
| 实现 | 说明 |
|---|---|
| PublishProcessor | 广播处理器,多个发布者,多个订阅者,0个订阅者也发布消息,发布者在同一个线程发布消息 |
| MulticastProcessor | 广播处理器,多个发布者,多个订阅者,没有订阅者时不发布消息(自动取消) |
| ReplayProcessor | 重播处理器,多个发布者,多个订阅者 |
| UnicastProcessor | 单播处理器,多个发布者,一个订阅者 |
| BehaviorProcessor | 类似重播处理器,但仅重播最近一次消息和后续所有消息 |
| AsyncProcessor | 类似重播处理器,但仅重播最近一次消息和结束消息 |
| SerializedProcessor | 所有方法加锁串行化,实现线程安全 |
Reactor实现
Reactor也是这套规范的实现之一,Spring webflux使用了基于这个库实现的rectory-netty框架。更多信息参考官网。
Publisher
Reactor包含两个主要响应式流类:
reactor.core.publisher.Flux<T>:0…N个流reactor.core.publisher.Mono<T>:0或1个流
两个都是实现了org.reactivestreams.Publisher<T>接口。
Processor
| 实现 | 说明 |
|---|---|
| DirectProcessor | 广播处理器,多个发布者,多个订阅者,0个订阅者也发布消息,发布者在同一个线程发布消息 |
| EmitterProcessor | 广播处理器,多个发布者,多个订阅者,没有订阅者时不发布消息(自动取消) |
| ReplayProcessor | 重播处理器,多个发布者,多个订阅者 |
| UnicastProcessor | 单播处理器,多个发布者,一个订阅者 |
| TopicProcessor | 异步消息处理器,使用环形缓冲实现订阅发布模式,多个订阅者时,订阅后,每个订阅者处理所有后续消息;遵守Reactive Streams协议 |
| WorkQueueProcessor | 异步消息处理器;使用环形缓冲实现工作队列模式,多个订阅者时,每个订阅者只处理部分消息;部分遵守Reactive Streams协议 |
更多推荐
所有评论(0)