对Reactor
有一定的认识之後,接下来就要进入正题(迷:经过二十天才到正题?!),毕竟大部分的开发者不太会单独使用Reactor
,势必要有一个比较完整的framework,身为java开发者当然就是Spring framework,相对应於blocking 的Spring MVC
,Spring推出建立於Reactor
之上,non-blocking的Spring WebFlux
。在传统你需要concurrency
,需要控制状态与synchronized
,这常常会造成程序难以维护与各式各样的Bug,或是需要call api所导致thread
大量的等待时间,这些问题在Reactive的WebFlux
中都可以获得改善,但大致上是利用哪一种方式来改善的呢?
在传统的架构中,Spring MVC
是透过thread-per-request model
,也就是一个request会对应一条thread,但是request
很有可会会因为call 其他服务的api、读取或写入DB等等的事情导致thread
等待,也就是所谓的blocking,让珍贵的thread
没事做是非常奢侈的,这边如果有写前端经验可以利用javascript
来思考,在传统的javascript
网页开发没有非同步的概念,读取资料时整个画面会loading无法控制,造成使用者体验很差,效率相对不好。
这时候使用Event Loop
的模式,会有专门处理事情的thread
,当request
进来只是把要处理的task放入queue
中,就可以释放这个thread
,让worker thread
一件一件的将queue
里面的task处理完毕後再回传,此时就可以发现thread
基本上是没有等待时间的,可以更有效的利用CPU,提高处理效能,从javascript
来思考,当AJAX
出现後,开发者将需要等待的任务交由AJAX
完成,透过callback
来取回结果,画面就不会卡住。
当选择使用Spring WebFlux
後,从下方的图可以看到,核心是建立於Reactor
之上,有别於以往使用Tomcat
,改为非阻断的Netty
,Netty
改用了Event Loop
的方式来处理Request
,对应的DB也需要有支援 Reactive,呼应到之前所说,进入到Reactive的世界後,所有相关的都需要改为Reactive。
从上面的介绍看来,是不是觉得Reactive太棒了,马上要来把负责的专案全部翻掉改成用WebFlux
,或是之後的专案都选择要使用WebFlux
,究竟该如何选择呢?官方有提供一些建议。
Spring MVC
已经很顺了,那就没必要改变,毕竟命令式的开发方式还是最直觉且相对单纯,而且大部分的libraries都是阻断式(blocking)的,如果你没有遇到无法处理的瓶颈就没必要大刀阔斧的改变。JPA
、JDBC
),那Spring MVC
是你最好的选择。funtional
的 Spring WebFlux
。Spring MVC
或是 Spring WebFlux
(不是同一个专案)。Spring WebFlux
。Spring WebFlux
提供两种模式,一种是我们熟悉的annotation base
,让你更容易的从Spring MVC
转换过来,另一种则是Function Endpoint
,尽量的做到Functional Programming
。
今天先简单的认识WebFlux,主要说明了WebFlux产生的原因以及解决了什麽样问题,後续会接着介绍实际上是如何使用。
中台作为一种生态系统层级的架构,倚赖业界主流的技术系统,包含开源技术平台与框架: 业务中台:微服务─...
何谓路径? 要介绍路径绘图相关的api之前,必须要先理解什麽叫做『路径』。 有学过电脑绘图软件,例如...
前言 「图」就是前面所有的大集合体,并从中衍生很多的内容,内容有点超乎想像的多,容小的慢慢写~~ 有...
居酒屋的热门料理,一直很想要试试看明太子料理,疫情期间比较没办法跟三五好友一起到居酒屋,周末就在家自...
这几天下来已经讲了六种关於数值的函式了,今天就换换口味,讲讲关於字串的函式。 今天要谈到的是spli...