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

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

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

前言

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

1.什么是響應式編程:

提到響應式編程,跟傳統的編程區別可能剛開始不太好區分,其中最重要的區別就是傳統的是阻塞的,響應式編程是非阻塞異步。官網介紹響應式編程:

  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. 在計算機領域,響應式編程是一個專注于數據流和變化傳遞的異步編程范式。 
  10. 這意味著可以使用編程語言很容易地表示靜態(例如數組)或動態(例如事件發射器)數據流, 
  11. 并且在關聯的執行模型中,存在著可推斷的依賴關系,這個關系的存在有利于自動傳播與數據流有關的更改。 

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

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

并且在關聯的執行模型中,存在著可推斷的依賴關系,這個關系的存在有利于自動傳播與數據流有關的更改。

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

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

比較經典的圖示:

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

Mono Flux
實現發布者,并返回 0 或 1 個元素,即單對象 實現發布者,并返回 N 個元素,即 List 列表對象

3.Jetty、tomcat、undertow、netty怎么區分:

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

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庫,因為網關性能的要求,所有spring-cloud-gateway直接集成了webflux,使用Netty的nio的特性極大的滿足了網關高并發,高性能要求的場景,個人覺得不見得響應式編程未來會遍地開發,但是網關這種特殊的場景確實比較適合響應式編程的應用。

 

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

2022-09-22 08:19:26

WebFlux函數式編程

2022-03-09 23:02:30

Java編程處理模型

2022-09-26 08:54:39

Spring函數式編程

2023-11-27 07:42:27

Reactor響應式

2020-08-31 07:19:57

MonoFlux Reactor

2025-05-06 01:14:00

系統編程響應式

2019-07-01 13:34:22

vue系統數據

2021-07-14 13:12:51

2022-06-16 13:08:30

Combine響應式編程訂閱

2022-07-15 08:16:56

Stream函數式編程

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

編程系統

2022-03-29 07:32:38

R2DBC數據庫反應式

2022-09-01 08:00:00

響應式編程集成

2024-09-02 16:10:19

vue2前端

2020-10-27 10:26:03

編程開發Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美8一10sex性hd | 色婷婷综合久久久中文字幕 | 岛国av一区二区三区 | 在线观看视频一区 | 亚洲国产精品久久久久婷婷老年 | 亚洲天堂一区 | 欧美簧片 | 亚洲精品久久久蜜桃网站 | 久久久国产一区二区三区 | 亚洲成人网在线 | 成年视频在线观看福利资源 | 99国内精品久久久久久久 | 黄色大片观看 | 免费福利视频一区二区三区 | 国产黄色免费网站 | 久久久久久久久久久蜜桃 | 久久国产亚洲精品 | 97人澡人人添人人爽欧美 | 91视频免费在观看 | 欧美人妖网站 | 美女一区| 亚洲国产精品一区二区第一页 | 先锋资源网| 亚洲一区三区在线观看 | 亚洲一区二区三区免费视频 | 日韩精品一区二 | 久久成人在线视频 | 一区二区在线观看免费视频 | 91一区二区| 九九综合九九 | 日韩一二三区 | 波多野结衣一二三区 | 免费在线一区二区三区 | 精品欧美一区二区精品久久 | 免费一区 | a级在线免费视频 | 亚洲码欧美码一区二区三区 | 成人在线一级片 | 一区二区三区视频 | 一区视频在线 | 国产黄色在线观看 |