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协议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值