Reactor之Flux的使用介绍(二)

上次写了Mono的使用介绍后, 能够知道Mono主要是针对的是 0个或者1个对象,而Flux则是0个或者多个集合元素.java

测试结果以下,前面了解了Mono的基本流程,在看Flux其实就是是和容易了,其实跟Java8的stream流式很像,只这是对于集合的一个一个元素的处理,这里惟独对于集合的时候,和涉及的回压(back pressure)的概念,这也是它跟其余的RXjava和Java Stream中一个比较重要的差别点,执行结果以下 首先,从定义几种策略来看,主要有如下几种:缓存

  1. IGNORE: 彻底忽略下游的回压策略的请求
  2. ERROR: 当下游没法保持住的时候报Error异常
  3. DROP: 若是下游尚未准备好接收,丢失掉已经来的信号
  4. LATEST: 下游将会从上游获取最新的信号.
  5. 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对生产的元素进行消费 markdown

总结
今天主要对FluxCreate对于FluxSink的建立和使用流程分析,测试