Reactor的Mono的使用介绍(一)

18,643 阅读2分钟

Spring5的已经支持Reactor模型,主要提供开发者使用的是Mono和Flux,在Reator遵循ReactiveStreams的标准的API的现,Rxjava是在Reactor之前实现反应流式库,Spring 5实现了 在Reactor-Netty基础上实现SpringMVC的框架命名为Spring Webflux,这是取代传统的servlet API的异步框架.

接下来,主要了解下Reactive Streams的标准.

  1. Publisher(发布者) 数据提供者,提供给订阅者使用

  2. Subscription(订阅) 订阅者订阅的发布者提供的数据

  3. Subscriber(订阅者) 订阅发布者的数据

  4. Processor(处理器) 这个接口集成了发布者和订阅者接口,所以处理器是发布者和订阅者都可以使用处理器.

    上面简单的测试用例中,当执行subscribe方法时候,才回去真实调用订阅者去订阅发布者的元素.
    从Mono的subscribe方法中,可以看出这里默认是创建的是 LambdaMonoSubscriber订阅者,它其实是对于consumer等函数式接口的封装类,然后执行subscribe方法传入该订阅者.
    如果publisher中间如果有优化的动作则会执行优化的操作,然后最后就是执行发布者的subscribe方法发起订阅.
    接下来会执行调用MonoJust的subscribe方法,真实执行有actual这个订阅者执行onSubscribe方法,这里订阅者对象实际 是ScalarSubscription标量的订阅对象.
    由Subscription对象调用request方法,向订阅者发送订阅元素请求元素个数的方法,默认是Long类型的最大值.
    然后执行LambdaMonoSubscriber订阅者的onNext对元素进行订阅.
    LambdaMonoSubscriber的onNext就会对订阅元素做消费者执行lambda函数的回调处理,打印出对应的元素数据.并且回调用onComplete,onError的调用.

    github上找了一个对于整个过程的时序图,便于大家理解

总结
今天主要是对于Reactor的Mono的执行过程有了一个浅析,后面会更加深入理解它背后的原理.