成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

90-Webflux響應式編程怎么去理解?

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

前言

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

1.什么是響應式編程:

提到響應式編程,跟傳統(tǒng)的編程區(qū)別可能剛開始不太好區(qū)分,其中最重要的區(qū)別就是傳統(tǒng)的是阻塞的,響應式編程是非阻塞異步。官網(wǎ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. 在計算機領域,響應式編程是一個專注于數(shù)據(jù)流和變化傳遞的異步編程范式。 
  10. 這意味著可以使用編程語言很容易地表示靜態(tài)(例如數(shù)組)或動態(tài)(例如事件發(fā)射器)數(shù)據(jù)流, 
  11. 并且在關聯(lián)的執(zhí)行模型中,存在著可推斷的依賴關系,這個關系的存在有利于自動傳播與數(shù)據(jù)流有關的更改。 

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

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

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

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

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

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

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

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

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

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

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,默認使用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> 

 

總結

 

其實Spring提供的webflux框架簡化了我們操作Netty使用的復雜性,提供了Reactor Netty庫,因為網(wǎng)關性能的要求,所有spring-cloud-gateway直接集成了webflux,使用Netty的nio的特性極大的滿足了網(wǎng)關高并發(fā),高性能要求的場景,個人覺得不見得響應式編程未來會遍地開發(fā),但是網(wǎng)關這種特殊的場景確實比較適合響應式編程的應用。

 

責任編輯:武曉燕 來源: Java時間屋
相關推薦

2022-09-22 08:19:26

WebFlux函數(shù)式編程

2022-03-09 23:02:30

Java編程處理模型

2023-11-27 07:42:27

Reactor響應式

2022-09-26 08:54:39

Spring函數(shù)式編程

2020-08-31 07:19:57

MonoFlux Reactor

2025-05-06 01:14:00

系統(tǒ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響應式編程訂閱

2022-07-15 08:16:56

Stream函數(shù)式編程

2023-01-28 08:04:08

AOPSpring框架

2024-03-06 07:52:21

Spring框架響應式編程微服務架構

2016-11-03 13:19:38

vue.jsjavascript前端

2023-07-12 08:16:54

JVM工具包Vert.x

2022-10-25 08:05:12

Kotlin響應式編程

2022-08-25 11:00:19

編程系統(tǒng)

2022-03-29 07:32:38

R2DBC數(shù)據(jù)庫反應式

2022-09-01 08:00:00

響應式編程集成

2024-09-02 16:10:19

vue2前端

2020-10-27 10:26:03

編程開發(fā)Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕免费 | 九九色九九| 欧美福利专区 | 国产一区二区美女 | 国产美女高潮 | 欧美无乱码久久久免费午夜一区 | 国产视频一二三区 | 成人午夜激情 | 日韩精品一区二区三区视频播放 | 国产午夜精品一区二区三区 | 日韩欧美一二三区 | 亚洲aⅴ精品 | 国产高清91| 激情五月激情综合网 | 九九久久精品 | 91久久久久久 | 久久国产一区二区三区 | 亚洲天堂一区 | 求毛片 | 在线观看精品视频网站 | 一级片在线观看视频 | 九九激情视频 | 成人看片在线观看 | 亚洲欧洲成人在线 | 免费精品 | 欧美视频二区 | 亚洲黄色一区二区三区 | 国产激情偷乱视频一区二区三区 | 美女一区 | 久久久激情视频 | 亚洲中午字幕 | 日韩在线免费视频 | 久久久久久中文字幕 | 日本午夜精品 | 欧美v日韩| 美女福利视频一区 | 天天看天天爽 | 欧美性成人| 91视频麻豆 | 欧美精品1区 | 玖玖操|