javascript
关于java的响应式编程框架----SpringReactor
關于Reactor的介紹
Reactor是Spring中的一個子項目是一個基于java的響應式編程框架,此框架是 Pivotal 公司(開發 Spring 等技術的公司)開發的,實現了 Reactive Programming(反應式編程即響應式編程) 思想,符合?Reactive Streams 規范(Reactive Streams 是由 Netflix、TypeSafe、Pivotal 等公司發起的)的一項技術。其名字有反應堆之意,反映了其背后的強大的性能。?
Spring 5?對應的Reactor框架的版本為3.1.0。(由于Spring5實現了很多關于函數式編程的東西,所以jdk版本至少得1.8)
關于反應式編程的思想:
反應式編程框架主要采用了觀察者模式,而SpringReactor的核心則是對觀察者模式的一種衍伸。關于觀察者模式的架構中被觀察者(Observable)和觀察者(Subscriber)處在不同的線程環境中時,由于者各自的工作量不一樣,導致它們產生事件和處理事件的速度不一樣,這時就出現了兩種情況:
被觀察者產生事件慢一些,觀察者處理事件很快。那么觀察者就會等著被觀察者發送事件,(好比觀察者在等米下鍋,程序等待,這沒有問題)。
被觀察者產生事件的速度很快,而觀察者處理很慢。那就出問題了,如果不作處理的話,事件會堆積起來,最終擠爆你的內存,導致程序崩潰。(好比被觀察者生產的大米沒人吃,堆積最后就會爛掉)。為了方便下面理解Mono和Flux,也可以理解為Publisher(發布者也可以理解為被觀察者)主動推送數據給Subscriber(訂閱者也可以叫觀察者),如果Publisher發布消息太快,超過了Subscriber的處理速度,如何處理。這時就出現了Backpressure(背壓-----指在異步場景中,被觀察者發送事件速度遠快于觀察者的處理速度的情況下,一種告訴上游的被觀察者降低發送速度的策略)
Reactor的主要類:
在Reactor中,經常使用的類并不多,主要有以下兩個:
Mono?實現了?org.reactivestreams.Publisher?接口,代表0到1個元素的發布者(Publisher)。
Flux?同樣實現了?org.reactivestreams.Publisher?接口,代表0到N個元素的發布者(Subscriber)。
可能會使用到的類:
Scheduler?表示背后驅動反應式流的調度器,通常由各種線程池實現。
SpringFlux的介紹
Spring5引入了一個基于Netty而不是Servlet高性能Web框架,但是使用方式和傳統的基于Servlet的SrpingMvc并沒有什么大的不同。
Web Flux中MVC接口的示例:
最大的變化就是返回值從?Foobar?所表示的一個對象變為?Mono<Foobar>?(或?Flux<T>)。
關于Reactive Streams、Srping Reactor 和 Spring Flux(Web Flux)之間的關系
Reactive Streams 是規范,Reactor 實現了 Reactive Streams。Web Flux 以 Reactor 為基礎,實現 Web 領域的反應式編程框架
關于Mono和Flux
Mono和Flux都是Publisher(發布者)。
其實,對于大部分業務開發人員來說,當編寫反應式代碼時,我們通常只會接觸到?Publisher?這個接口,對應到 Reactor 便是?Mono?和?Flux。對于?Subscriber?和?Subcription?這兩個接口,Reactor 必然也有相應的實現。但是,這些都是 Web Flux 和 Spring Data Reactive 這樣的框架用到的。如果不開發中間件,通常開發人員是不會接觸到的。
比如,在 Web Flux,你的方法只需返回?Mono?或?Flux?即可。你的代碼基本也只和?Mono?或?Flux?打交道。而 Web Flux 則會實現?Subscriber?,onNext?時將業務開發人員編寫的?Mono?或?Flux?轉換為 HTTP Response 返回給客戶端。
---------------------?
作者:TNTnine?
來源:CSDN?
原文:https://blog.csdn.net/TNTnine/article/details/83060950?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的关于java的响应式编程框架----SpringReactor的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git clone remote: HT
- 下一篇: Spring/SpringBoot常用注