上次写了Mono的使用介绍后, 可以知道Mono主要是针对的是 0个或者1个对象,而Flux则是0个或者多个集合元素.
测试结果如下,前面了解了Mono的基本流程,在看Flux其实就是是和容易了,其实跟Java8的stream流式很像,只这是对于集合的一个一个元素的处理,这里唯独对于集合的时候,和涉及的回压(back pressure)的概念,这也是它跟其他的RXjava和Java Stream中一个比较重要的差异点,执行结果如下
首先,从定义几种策略来看,主要有以下几种:
- IGNORE: 完全忽略下游的回压策略的请求
- ERROR: 当下游无法保持住的时候报Error异常
- DROP: 如果下游还没有准备好接收,丢失掉已经来的信号
- LATEST: 下游将会从上游获取最新的信号.
- BUFFER: 如果下游无法保持处理,则缓存所有信号.
通过FluxCreate对象对于FluxSink, OverflowStrategy (回压策略),CreateMode(模式:1.PUSH_ONLY推模式,2.PUSH_PULL 推拉模式)
接着会以LambdaSubscriber这个订阅者.
然后执行FluxCreate的subscribe方法订阅LambdaSubscriber,注意这里是FluxCreate这个Publisher发起订阅,实际是逻辑是订阅者对发布者进行订阅.
执行对LambdaSubscriber订阅时,这里会创建Sink的模式,这里描述的Sink其实就是元素的生产者.
可以看到默认是buffer的Sink的回压策略.
由订阅者LambdaSubscriber执行onSubscribe对BufferAsyncSink这个sink的订阅
然后执行BufferAsyncSink的request方法,进行元素消费
执行BufferAsyncSink的onRequestedFromDownstream方法是从下游往上游请求,然后执行drain执行对队列元素的消费.
然后执行source实际对象是前面创建业务的Sink的lambda表达式,通过调用next方法执行产生元素的生产,让订阅者执行onNext对生产的元素进行消费
总结
今天主要对FluxCreate对于FluxSink的创建和使用流程分析,