Reactor之Flux的使用介绍(二)

1,500 阅读2分钟

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

测试结果如下,前面了解了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对生产的元素进行消费

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