偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

90-Webflux響應(yīng)式編程怎么去理解?

開(kāi)發(fā) 前端
現(xiàn)在網(wǎng)關(guān)都采用spring-cloud-gateway,我們看使用過(guò)程中發(fā)現(xiàn)編碼已經(jīng)采用響應(yīng)式編程,直接集成了spring-boot-starter-webflux依賴,這就捎帶著把響應(yīng)式編程帶火了一把。
本文轉(zhuǎn)載自微信公眾號(hào)「Java時(shí)間屋」,作者 Jack佳。轉(zhuǎn)載本文請(qǐng)聯(lián)系一個(gè)Java時(shí)間屋公眾號(hào)。
  • 前言
    • 1.什么是響應(yīng)式編程:
    • 2.使用spring-boot-starter-webflux:
    • 3.Jetty、tomcat、undertow、netty怎么區(qū)分:
  • 總結(jié)

前言

現(xiàn)在網(wǎng)關(guān)都采用spring-cloud-gateway,我們看使用過(guò)程中發(fā)現(xiàn)編碼已經(jīng)采用響應(yīng)式編程,直接集成了spring-boot-starter-webflux依賴,這就捎帶著把響應(yīng)式編程帶火了一把。本文結(jié)合我的理解對(duì)響應(yīng)式編程做一個(gè)總結(jié)性的介紹,希望能幫助到大家。

1.什么是響應(yīng)式編程:

提到響應(yīng)式編程,跟傳統(tǒng)的編程區(qū)別可能剛開(kāi)始不太好區(qū)分,其中最重要的區(qū)別就是傳統(tǒng)的是阻塞的,響應(yīng)式編程是非阻塞異步。官網(wǎng)介紹響應(yīng)式編程:

  1. In computing, reactive programming is an asynchronous programming paradigm  
  2. concerned with data streams and the propagation of change.  
  3. This means that it becomes possible to express static (e.g. arrays) or  
  4. dynamic (e.g. event emitters) data streams with ease via the employed  
  5. programming language(s), and that an inferred dependency within the  
  6. associated execution model exists, which facilitates the automatic propagation of  
  7. the change involved with data flow. 
  8.  
  9. 在計(jì)算機(jī)領(lǐng)域,響應(yīng)式編程是一個(gè)專注于數(shù)據(jù)流和變化傳遞的異步編程范式。 
  10. 這意味著可以使用編程語(yǔ)言很容易地表示靜態(tài)(例如數(shù)組)或動(dòng)態(tài)(例如事件發(fā)射器)數(shù)據(jù)流, 
  11. 并且在關(guān)聯(lián)的執(zhí)行模型中,存在著可推斷的依賴關(guān)系,這個(gè)關(guān)系的存在有利于自動(dòng)傳播與數(shù)據(jù)流有關(guān)的更改。 

在計(jì)算機(jī)領(lǐng)域,響應(yīng)式編程是一個(gè)專注于數(shù)據(jù)流和變化傳遞的異步編程范式。

這意味著可以使用編程語(yǔ)言很容易地表示靜態(tài)(例如數(shù)組)或動(dòng)態(tài)(例如事件發(fā)射器)數(shù)據(jù)流,

并且在關(guān)聯(lián)的執(zhí)行模型中,存在著可推斷的依賴關(guān)系,這個(gè)關(guān)系的存在有利于自動(dòng)傳播與數(shù)據(jù)流有關(guān)的更改。

可能這段話還是不好理解,但是可以著重看下數(shù)據(jù)變化,響應(yīng)式編程就是基于數(shù)據(jù)變化的新的編程模式,實(shí)現(xiàn)異步非阻塞,就是當(dāng)請(qǐng)求來(lái)了之后進(jìn)行訂閱數(shù)據(jù)的變化,后續(xù)業(yè)務(wù)處理發(fā)布變化,然后進(jìn)行監(jiān)聽(tīng)到變化,進(jìn)行響應(yīng)。而傳統(tǒng)的springmvc則是創(chuàng)建新線程等待阻塞,知道請(qǐng)求完畢,釋放線程的過(guò)程。

2.使用spring-boot-starter-webflux:

比較經(jīng)典的圖示:

從圖中我們可以看到基于spring-webmvc和spring-webflux的路線和區(qū)別。其中webflux默認(rèn)是使用netty的通信框架作為web容器,相比較tomcat,netty的優(yōu)勢(shì)不再贅述了,并發(fā)高、傳輸快、封裝好,其中netty的零拷貝等等。我們?cè)谑褂脀ebflux的時(shí)候注意兩個(gè)需要經(jīng)常使用的對(duì)象Mono和Flux:

Mono Flux
實(shí)現(xiàn)發(fā)布者,并返回 0 或 1 個(gè)元素,即單對(duì)象 實(shí)現(xiàn)發(fā)布者,并返回 N 個(gè)元素,即 List 列表對(duì)象

3.Jetty、tomcat、undertow、netty怎么區(qū)分:

tomcat:市場(chǎng)占有率仍然非常高,雖然性能上跟其他web服務(wù)器比較會(huì)有欠缺,但是因?yàn)槠涑墒?,?shí)踐度很高。undertow和Jetty都是基于NIO實(shí)現(xiàn)高并發(fā)的輕量級(jí)服務(wù)器,支持servlet3.1和websocket springboot2以后增加了webflux的web容器,而webflux是基于netty的,netty是nio的,加上其零拷貝的實(shí)現(xiàn),保證其性能上占據(jù)優(yōu)勢(shì)。

3.1 springboot中使用jetty:

  1. <!-- web剔除tomcat容器= --> 
  2. <parent> 
  3.  <groupId>org.springframework.boot</groupId> 
  4.  <artifactId>spring-boot-starter-parent</artifactId> 
  5.  <version>1.5.10.RELEASE</version> 
  6.  <relativePath/> <!-- lookup parent from repository --> 
  7. </parent> 
  8. <dependency> 
  9.     <groupId>org.springframework.boot</groupId> 
  10.     <artifactId>spring-boot-starter-web</artifactId> 
  11.     <exclusions> 
  12.         <exclusion> 
  13.             <artifactId>spring-boot-starter-tomcat</artifactId> 
  14.             <groupId>org.springframework.boot</groupId> 
  15.         </exclusion> 
  16.     </exclusions> 
  17. </dependency> 
  18. <!-- 引入Jetty容器--> 
  19. <dependency> 
  20.     <groupId>org.springframework.boot</groupId> 
  21.     <artifactId>spring-boot-starter-jetty</artifactId> 
  22. </dependency> 

 

3.2 springboot中使用Webflux/Netty:

  1. <!-- 添加spring-boot-starter-web,默認(rèn)使用tomcat作為web容器 --> 
  2.         <dependency> 
  3.             <groupId>org.springframework.boot</groupId> 
  4.             <artifactId>spring-boot-starter-web</artifactId> 
  5.             <exclusions> 
  6.                 <exclusion> 
  7.                     <groupId>org.springframework.boot</groupId> 
  8.                     <artifactId>spring-boot-starter-logging</artifactId> 
  9.                 </exclusion> 
  10.                 <exclusion> 
  11.                     <groupId>org.springframework.boot</groupId> 
  12.                     <artifactId>spring-boot-starter-tomcat</artifactId> 
  13.                 </exclusion> 
  14.             </exclusions> 
  15.         </dependency> 
  16.         <!-- 去除tomcat,將undertow作為容器 --> 
  17.          <dependency> 
  18.             <groupId>org.springframework.boot</groupId> 
  19.             <artifactId>spring-boot-starter-undertow</artifactId> 
  20.         </dependency> 

 

總結(jié)

 

其實(shí)Spring提供的webflux框架簡(jiǎn)化了我們操作Netty使用的復(fù)雜性,提供了Reactor Netty庫(kù),因?yàn)榫W(wǎng)關(guān)性能的要求,所有spring-cloud-gateway直接集成了webflux,使用Netty的nio的特性極大的滿足了網(wǎng)關(guān)高并發(fā),高性能要求的場(chǎng)景,個(gè)人覺(jué)得不見(jiàn)得響應(yīng)式編程未來(lái)會(huì)遍地開(kāi)發(fā),但是網(wǎng)關(guān)這種特殊的場(chǎng)景確實(shí)比較適合響應(yīng)式編程的應(yīng)用。

 

責(zé)任編輯:武曉燕 來(lái)源: Java時(shí)間屋
相關(guān)推薦

2022-09-22 08:19:26

WebFlux函數(shù)式編程

2022-03-09 23:02:30

Java編程處理模型

2023-11-27 07:42:27

Reactor響應(yīng)式

2022-09-26 08:54:39

Spring函數(shù)式編程

2020-08-31 07:19:57

MonoFlux Reactor

2025-05-06 01:14:00

系統(tǒng)編程響應(yīng)式

2019-07-01 13:34:22

vue系統(tǒng)數(shù)據(jù)

2021-07-14 13:12:51

2022-06-16 13:08:30

Combine響應(yīng)式編程訂閱

2022-07-15 08:16:56

Stream函數(shù)式編程

2023-01-28 08:04:08

AOPSpring框架

2024-03-06 07:52:21

Spring框架響應(yīng)式編程微服務(wù)架構(gòu)

2016-11-03 13:19:38

vue.jsjavascript前端

2023-07-12 08:16:54

JVM工具包Vert.x

2022-10-25 08:05:12

Kotlin響應(yīng)式編程

2022-08-25 11:00:19

編程系統(tǒng)

2022-03-29 07:32:38

R2DBC數(shù)據(jù)庫(kù)反應(yīng)式

2022-09-01 08:00:00

響應(yīng)式編程集成

2024-09-02 16:10:19

vue2前端

2020-10-27 10:26:03

編程開(kāi)發(fā)Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)