這篇文章主要介紹“如何在Spring Boot中使用Webflux”,在日常操作中,相信很多人在如何在Spring Boot中使用Webflux問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何在Spring Boot中使用Webflux”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、東蘭網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、電子商務(wù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為東蘭等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。為了方便大家理解,我們先來了解幾個(gè)概念。
在計(jì)算機(jī)中,響應(yīng)式編程或反應(yīng)式編程(英語:Reactive programming)是一種面向數(shù)據(jù)流和變化傳播的編程范式。這意味著可以在編程語言中很方便地表達(dá)靜態(tài)或動態(tài)的數(shù)據(jù)流,而相關(guān)的計(jì)算模型會自動將變化的值通過數(shù)據(jù)流進(jìn)行傳播。
例如,在命令式編程環(huán)境中,a=b+c 表示將表達(dá)式的結(jié)果賦給 a,而之后改變 b 或 c 的值不會影響 a 。但在響應(yīng)式編程中,a 的值會隨著 b 或 c 的更新而更新。
響應(yīng)式編程是基于異步和事件驅(qū)動的非阻塞程序,只需要在程序內(nèi)啟動少量線程擴(kuò)展,而不是水平通過集群擴(kuò)展。
用大白話講,我們以前編寫的大部分都是阻塞類的程序,當(dāng)一個(gè)請求過來時(shí)任務(wù)會被阻塞,直到這個(gè)任務(wù)完成后再返回給前端;響應(yīng)式編程接到請求后只是提交了一個(gè)請求給后端,后端會再安排另外的線程去執(zhí)行任務(wù),當(dāng)任務(wù)執(zhí)行完成后再異步通知到前端。
Reactor
Java 領(lǐng)域的響應(yīng)式編程庫中,最有名的算是 Reactor 了。Reactor 也是 Spring 5 中反應(yīng)式編程的基礎(chǔ),Webflux 依賴 Reactor 而構(gòu)建。
Reactor 是一個(gè)基于 JVM 之上的異步應(yīng)用基礎(chǔ)庫。為 Java 、Groovy 和其他 JVM 語言提供了構(gòu)建基于事件和數(shù)據(jù)驅(qū)動應(yīng)用的抽象庫。Reactor 性能相當(dāng)高,在最新的硬件平臺上,使用無堵塞分發(fā)器每秒鐘可處理 1500 萬事件。
簡單說,Reactor 是一個(gè)輕量級 JVM 基礎(chǔ)庫,幫助你的服務(wù)或應(yīng)用高效,異步地傳遞消息。Reactor 中有兩個(gè)非常重要的概念 Flux 和 Mono 。
Flux 和 Mono
Flux 和 Mono 是 Reactor 中的兩個(gè)基本概念。Flux 表示的是包含 0 到 N 個(gè)元素的異步序列。在該序列中可以包含三種不同類型的消息通知:正常的包含元素的消息、序列結(jié)束的消息和序列出錯(cuò)的消息。當(dāng)消息通知產(chǎn)生時(shí),訂閱者中對應(yīng)的方法 onNext(), onComplete()和 onError()會被調(diào)用。
Mono 表示的是包含 0 或者 1 個(gè)元素的異步序列。該序列中同樣可以包含與 Flux 相同的三種類型的消息通知。Flux 和 Mono 之間可以進(jìn)行轉(zhuǎn)換。對一個(gè) Flux 序列進(jìn)行計(jì)數(shù)操作,得到的結(jié)果是一個(gè) Mono
WebFlux 模塊的名稱是 spring-webflux,名稱中的 Flux 來源于 Reactor 中的類 Flux。Spring webflux 有一個(gè)全新的非堵塞的函數(shù)式 Reactive Web 框架,可以用來構(gòu)建異步的、非堵塞的、事件驅(qū)動的服務(wù),在伸縮性方面表現(xiàn)非常好。
非阻塞的關(guān)鍵預(yù)期好處是能夠以小的固定數(shù)量的線程和較少的內(nèi)存進(jìn)行擴(kuò)展。在服務(wù)器端 WebFlux 支持2種不同的編程模型:
基于注解的 @Controller 和其他注解也支持 Spring MVC
Functional 、Java 8 lambda 風(fēng)格的路由和處理
如圖所示,WebFlux 模塊從上到下依次是 Router Functions、WebFlux、Reactive Streams 三個(gè)新組件。
Router Functions
對標(biāo)準(zhǔn)的 @Controller,@RequestMapping 等的 Spring MVC 注解,提供一套 函數(shù)式風(fēng)格的 API,用于創(chuàng)建 Router、Handler 和Filter。
WebFlux
核心組件,協(xié)調(diào)上下游各個(gè)組件提供 響應(yīng)式編程 支持。
Reactive Streams
一種支持 背壓 (Backpressure) 的 異步數(shù)據(jù)流處理標(biāo)準(zhǔn),主流實(shí)現(xiàn)有 RxJava 和 Reactor,Spring WebFlux 集成的是 Reactor。
默認(rèn)情況下,Spring Boot 2 使用 Netty WebFlux,因?yàn)?Netty 在異步非阻塞空間中被廣泛使用,異步非阻塞連接可以節(jié)省更多的資源,提供更高的響應(yīng)度。通過比較 Servlet 3.1 非阻塞 I / O 沒有太多的使用,因?yàn)槭褂盟某杀颈容^高,Spring WebFlux 打開了一條實(shí)用的通路。
值得注意的是:支持 reactive 編程的數(shù)據(jù)庫只有 MongoDB, redis, Cassandra, Couchbase
Spring Webflux
Spring Boot 2.0 包括一個(gè)新的 spring-webflux 模塊。該模塊包含對響應(yīng)式 HTTP 和 WebSocket 客戶端的支持,以及對 REST,HTML 和 WebSocket 交互等程序的支持。一般來說,Spring MVC 用于同步處理,Spring Webflux 用于異步處理。
Spring Boot Webflux 有兩種編程模型實(shí)現(xiàn),一種類似 Spring MVC 注解方式,另一種是基于 Reactor 的響應(yīng)式方式。
添加 webflux 依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
通過 IEDA 的依賴關(guān)系圖我們可以返現(xiàn)spring-boot-starter-webflux
依賴于spring-webflux
、Reactor 和 Netty 相關(guān)依賴包。
創(chuàng)建 Controller
@RestController
public class HelloController {
@GetMapping("/hello")
public Mono<String> hello() {
return Mono.just("Welcome to reactive world ~");
}
}
通過上面的示例可以發(fā)現(xiàn),開發(fā)模式和之前 Spring Mvc 的模式差別不是很大,只是在方法的返回值上有所區(qū)別。
just()
方法可以指定序列中包含的全部元素。
響應(yīng)式編程的返回值必須是 Flux 或者 Mono ,兩者之間可以相互轉(zhuǎn)換。
測試類
@RunWith(SpringRunner.class)
@WebFluxTest(controllers = HelloController.class)
public class HelloTests {
@Autowired
WebTestClient client;
@Test
public void getHello() {
client.get().uri("/hello").exchange().expectStatus().isOk();
}
}
運(yùn)行測試類,測試用例通過表示服務(wù)正常。啟動項(xiàng)目后,訪問地址:http://localhost:8080/hello
,頁面返回信息:
Welcome to reactive world ~
證明 Webflux 集成成功。
到此,關(guān)于“如何在Spring Boot中使用Webflux”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
網(wǎng)站名稱:如何在SpringBoot中使用Webflux-創(chuàng)新互聯(lián)
分享URL:http://aaarwkj.com/article24/ccdpje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、面包屑導(dǎo)航、網(wǎng)站收錄、品牌網(wǎng)站設(shè)計(jì)、企業(yè)建站、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容