Spring5的已经支持Reactor模型,主要提供开发者使用的是Mono和Flux,在Reator遵循ReactiveStreams的标准的API的现,Rxjava是在Reactor之前实现反应流式库,Spring 5实现了 在Reactor-Netty基础上实现SpringMVC的框架命名为Spring Webflux,这是取代传统的servlet API的异步框架.
接下来,主要了解下Reactive Streams的标准.
-
Publisher(发布者) 数据提供者,提供给订阅者使用
-
Subscription(订阅) 订阅者订阅的发布者提供的数据
-
Subscriber(订阅者) 订阅发布者的数据
-
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的执行过程有了一个浅析,后面会更加深入理解它背后的原理.