国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

深度解析Spring Cloud Gateway的底層實現(xiàn)原理

原創(chuàng) 精選
開發(fā) 架構(gòu)
Spring Cloud Gateway是一個基于Spring Framework 5和Project Reactor的響應(yīng)式API網(wǎng)關(guān),旨在為構(gòu)建分布式微服務(wù)架構(gòu)提供高性能和靈活的路由機(jī)制。

作者 | 波哥

審校 | 重樓

Spring Cloud Gateway是一個基于Spring Framework 5和Project Reactor的響應(yīng)式API網(wǎng)關(guān),旨在為構(gòu)建分布式微服務(wù)架構(gòu)提供高性能和靈活的路由機(jī)制底層實現(xiàn)基于Spring WebFlux框架,它使用WebFlux的HandlerMapping和HandlerAdapter來處理請求和生成響應(yīng)使用了反應(yīng)式編程的思想基于Project Reactor庫實現(xiàn)異步、非阻塞的事件驅(qū)動架構(gòu),以提高性能和吞吐量。

本文將帶你深入spring Cloud Gateway的底層實現(xiàn)原理,重點關(guān)注其核心組件和代碼實現(xiàn)。

1. Spring Cloud Gateway核心組件

Spring Cloud Gateway的核心組件主要有:

  • Routes(路由):定義了URI、謂詞(Predicates)和過濾器(Filters)的規(guī)則,用于將請求映射到后端服務(wù)。
  • Predicates(謂詞):定義了匹配條件,用于決定請求是否應(yīng)該映射到該路由。
  • Filters(過濾器):用于在請求和響應(yīng)期間對請求和響應(yīng)進(jìn)行修改或轉(zhuǎn)換在調(diào)用過程中,會有多個過濾器形成過濾器鏈,用于處理請求、修改請求頭、記錄日志、限流等操作。

2.SpringCloud Gateway的具體使用

先來了解下Spring Cloud Gateway的具體使用過程包括定義路由規(guī)則、自定義過濾器、啟動應(yīng)用等步驟。讓我們逐步詳細(xì)介紹這些步驟。

  • 定義路由規(guī)則

首先,在Spring Cloud Gateway中,我們需要定義路由規(guī)則。路由規(guī)則定義了請求該如何被路由到后端服務(wù)。這些規(guī)則通常以Java或YAML配置文件的形式提供YAML配置為例:

  • 自定義過濾器

我們可以編寫自定義過濾器,對請求或響應(yīng)進(jìn)行特定的處理,例如添加頭信息、修改請求、記錄日志等。這里定義了要給GlobalFilter類型的過濾器,當(dāng)然也可以定義非GlobalFilter類型的過濾器。

  • 啟動應(yīng)用

通過啟動Spring Boot應(yīng)用程序,Spring Cloud Gateway將開始監(jiān)聽配置的端口,并根據(jù)路由規(guī)則將請求轉(zhuǎn)發(fā)到相應(yīng)的后端服務(wù)。

  • 訪問API

現(xiàn)在您可以通過訪問定義的路由規(guī)則來測試API。

例如,對于上述路由規(guī)則的Java配置方式,可以使用以下URL訪問API:

http://localhost:8080/sample/some-endpoint

Spring Cloud Gateway將根據(jù)路由規(guī)則將請求轉(zhuǎn)發(fā)到http://example.com

3.代碼原理剖析

接下來我們從上述使用案例入手,從GateWay的源碼層面分析其底層實現(xiàn)原理。要理解其原理,其實只要理解如下這張圖就足夠了,所以接下來的分析我們將圍繞這圖展開講解。

Gateway為網(wǎng)關(guān),也就是統(tǒng)一的入口,它本身也是一個Web應(yīng)用,在上面我們說過它是WebFlux框架,WebFlux大部分朋友可能都沒接觸過,我們可以使用SpringMVC進(jìn)行類比。從上圖我們可以看出,當(dāng)請求到達(dá)Gateway后,首先會進(jìn)入DispatcherHandler.handle方法進(jìn)行處理,在該方法中調(diào)用GatewayHandlerMapping.getHandler方法,然后進(jìn)入GatewayWebHandler.handle方法,隨后進(jìn)入Filter鏈進(jìn)行處理,處理完成后調(diào)用具體的服務(wù)綜上,在整個的調(diào)用過程中使用到:DispatcherHandler、RoutePredicateHandlerMappingSimpleHandlerAdapterFilteringWebHandler幾個核心的類(當(dāng)然還使用到了Ribbon負(fù)載均衡、Netty/Nacos等注冊中心相關(guān)的核心代碼,不過本篇我們只分析Gateway相關(guān)源碼),接下來我們將詳細(xì)分析關(guān)鍵代碼

1.DispatcherHandler

該類做為Gateway的入口,接受所有網(wǎng)關(guān)的請求,類似于SpringMVC的DispatcherServlet類,所有的請求都將進(jìn)入到handle方法中:

2.RoutePredicateHandlerMapping

這個RoutePredicateHandlerMapping就是上述handlerMappings的具體實現(xiàn)類,在handle方法就會使用到該類的實例,該類的主要作用是獲取Route,也就是我們在配置文件中可能會配置多個Route對于當(dāng)前請求最終會使用哪個Route。

很多朋友會問:HandlerMappings有那么多實現(xiàn)類,你怎么知道會使用RoutePredicateHandlerMapping呢?

要回答這個問題,得對SpringBoot的底層實現(xiàn)有一定的了解,針對SpringBoot的底層實現(xiàn)大家可以看相關(guān)的文章,這里不做分析,在這里大家只需要尋找到

的spring.factories文件,SpringBoot會讀取該文件中的配置,并將這些配置交由Spring容器管理就可以了。

在該配置中有一個配置類:GatewayAutoConfiguration,該配置類中完成對RoutePredicateHandlerMappingFilteringWebHandler等的配置:

RoutePredicateHandlerMapping做為HandlerMapping的實現(xiàn)類,自然就會被調(diào)用到。

接下來我們看RoutePredicateHandlerMapping是如何幫我們尋找到Route的:

如上圖代碼所示,就是在lookupRoute方法中通過調(diào)用routeLocator.getRoutes方法獲取到所有我們在應(yīng)用配置文件中配置的Route(具體如何獲取所有的Route源碼比較簡單,就是讀取配置文件中的所有Route配置信息,這個大家可以自行去看下代碼),然后調(diào)用getPredicate().apply方法確定具體的Route(也就是匹配斷言),匹配成功后,會將該Route設(shè)置到exchange(可以理解為當(dāng)前請求,即Request)的屬性中:

exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR, r);

3.SimpleHandlerAdapter

上述獲取到Route后,接下來會進(jìn)入到DispatcherHandler.invokeHandler方法:

該方法會執(zhí)行SimpleHandlerAdapter的handle方法:

該方法調(diào)用WebHandler.handle方法,也就是FilteringWebHandler

4.FilteringWebHandler

進(jìn)入FilteringWebHandler.handle方法后,會從exchange上下文中得到Route,一個Route中可能有多個GatewayFilter,這里將多個GatewayFilter生成一個DefaultGatewayFilterChain鏈對象,然后啟動鏈調(diào)用,這過程中會完成一些列的動作,比如整合Ribbon負(fù)載均衡獲取到服務(wù)實例(ServerInstantce)最終調(diào)用NettyRoutingFilter完成對服務(wù)的調(diào)用。如下是Spring Cloud Gateway框架內(nèi)置的GlobalFilter:

全局過濾器

作用

Forward Routing Filter

用于本地forward,也就是將請求在Gateway服務(wù)內(nèi)進(jìn)行轉(zhuǎn)發(fā),而不是轉(zhuǎn)發(fā)到下游服務(wù)

LoadBalancerClient Filter

整合Ribbon實現(xiàn)負(fù)載均衡得到最終的ServerInstance




Netty Routing Filter

使用Netty的HttpClient轉(zhuǎn)發(fā)http、https請求

Netty Write Response Filter

將代理響應(yīng)寫回網(wǎng)關(guān)的客戶端側(cè)

RouteToRequestUrl Filter

將從request里獲取的原始url轉(zhuǎn)換成Gateway進(jìn)行請求轉(zhuǎn)發(fā)時所使用的url

Websocket Routing Filter

使用Spring Web Socket將轉(zhuǎn)發(fā) Websocket 請求

Gateway Metrics Filter

整合監(jiān)控相關(guān),提供監(jiān)控指標(biāo)


本篇對Gateway的底層實現(xiàn)原理進(jìn)行詳細(xì)介紹,希望能對讀者朋友們有所幫助。

作者介紹

波哥,互聯(lián)行業(yè)從業(yè)10余年,先后擔(dān)任項目總監(jiān)及架構(gòu)師。目前專攻技術(shù),喜歡研究技術(shù)原理。技術(shù)全面,主攻Java,精通JVM底層機(jī)制及Spring全家桶底層框架原理,熟練掌握當(dāng)前主流的中間件、服務(wù)網(wǎng)格等技術(shù)原理。

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2023-02-20 10:13:00

灰度發(fā)布實現(xiàn)

2022-08-02 08:32:21

Spring項目網(wǎng)關(guān)

2019-08-22 09:55:17

RedisAPI數(shù)據(jù)

2018-11-09 09:34:05

面試Spring Clou底層

2024-05-13 18:35:06

負(fù)載均衡主機(jī)端口

2025-06-09 01:01:00

2023-02-28 08:57:06

Spring上下線緩存

2023-03-08 09:03:55

2022-08-15 09:22:12

JWT認(rèn)證系統(tǒng)

2023-02-13 08:10:40

Gateway網(wǎng)關(guān)Spring

2023-10-27 18:47:35

微服務(wù)底層機(jī)制

2021-07-05 07:51:43

JVM底層Python

2023-09-15 08:18:49

cookie網(wǎng)關(guān)代理

2023-01-04 07:54:03

HashMap底層JDK

2022-01-07 07:29:08

Rbac權(quán)限模型

2021-01-14 07:54:19

Spring Clou應(yīng)用路由

2021-01-08 08:34:09

Synchronize線程開發(fā)技術(shù)

2023-07-11 08:00:00

2023-01-26 01:41:27

核心全局過濾器

2023-07-24 08:00:56

客戶端訪問指定
點贊
收藏

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

超碰在线图片| 成人免费xxxxx在线观看| 免费超爽大片黄| sdde在线播放一区二区| 日韩女优毛片在线| 成人高清在线观看免费| 国产一区二区看久久| 国产精品99久久久久久人| 国内激情视频在线观看| 日韩欧美高清视频| 动漫av免费观看| 国内成+人亚洲+欧美+综合在线| 91免费人成网站在线观看18| 欧美中文高清| 亚洲欧美在线播放| 国产午夜视频在线观看| 成人欧美一区二区三区小说| 欧美久久久久久久久久久久久久| 最新国产拍偷乱拍精品| 国产精品美女免费看| 在线欧美激情| 日韩精品中文字幕久久臀| 国产一区精品| 午夜免费久久看| 国产小黄视频| 国产欧美日韩视频在线观看| 97干在线视频| 国产精品一色哟哟哟| 污视频在线免费观看一区二区三区| 天天综合一区| 国产精品自产拍高潮在线观看| 懂色av一区二区| 欧美极品少妇全裸体| 狂野欧美xxxx韩国少妇| 久久精品国产清自在天天线| 欧美日韩精品一区二区三区视频| 日韩极品精品视频免费观看| 僵尸再翻生在线观看免费国语| 精品国产伦理网| 欧美xxxx视频| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 91麻豆精品国产91久久久久久久久| 福利资源在线久| 亚洲综合视频网| 一本免费视频| 欧美日韩国产页| 日本大片在线观看| 日本道精品一区二区三区 | 岛国av在线一区| 无码毛片aaa在线| 国产白丝精品91爽爽久久 | 天堂久久一区二区三区| 欧美精品二区三区四区免费看视频 | 外国成人免费视频| 91在线免费网站| 亚洲精品a级片| 99久久久精品免费观看国产| 欧美日一区二区在线观看| 久久大片网站| 国产精品一级片在线观看| 鲁一鲁一鲁一鲁一澡| 国产精品久线在线观看| 黄页网站在线观看| 欧美日韩一区久久| 色是在线视频| 北条麻妃99精品青青久久| 久久人人爽人人爽人人片av不| 日产精品99久久久久久| 牛牛国产精品| 欧美 日韩 国产 在线观看| av资源站一区| 国产男女爽爽爽| 欧美视频一区二| 人在线成免费视频| 高清亚洲成在人网站天堂| 欧美亚洲精品在线| 欧美亚洲另类在线一区二区三区| 国产一区中文字幕| 成人综合av| 在线电影院国产精品| 韩国精品视频在线观看| 国产精品美女久久久久av超清| 亚洲女人av| 日日碰狠狠躁久久躁婷婷| 精品久久久久久久久久久久久久| 国产美女情趣调教h一区二区| 欧美人与性动交a欧美精品| 欧美一区高清| 日韩精品视频在线观看视频| 亚洲成a人v欧美综合天堂下载| 久草在线视频资源| 91精品国产91久久久久久久久| 日韩午夜av| 女性隐私黄www网站视频| 欧美日韩一区小说| 亚洲高清在线一区| 久久久99爱| 亚洲人成在线观看一区二区| 欧洲精品二区| 国产精品美女免费视频| 精品一区二区免费看| 在线影院福利| 中文字幕亚洲无线码a| 欧美精品播放| 日本男人操女人| 精品国产1区2区3区| 国产精品免费大片| 亚洲 欧美 综合 另类 中字| 欧美性猛交xxxx| 日本99精品| 一本一道久久a久久精品综合| 亚洲高清免费观看| 日韩免费在线电影| 三级三级久久三级久久18| 亚洲欧美经典视频| 深夜视频一区二区| 欧洲高清一区二区| 午夜精品一区二区三区三上悠亚| 成人在线不卡| 日韩精品久久一区| 精品日本美女福利在线观看| 精品一区二区三区中文字幕视频| 欧美亚州在线观看| 精品国产老师黑色丝袜高跟鞋| 永久免费观看精品视频| 一区二区三区国| 欧美日韩另类一区| 久久麻豆精品| 99热在线观看| 久久精品中文字幕电影| 麻豆视频一区二区| 免费黄色电影在线观看| 国产精品视频公开费视频| 国产婷婷精品av在线| 成人线上视频| 亚洲精品成人a8198a| 欧美三级三级三级| 99久久久久国产精品| www.成人69.com| 久久人人爽人人爽人人片av高请| 成人精品视频网站| 中文字幕人成乱码在线观看| 老司机精品福利在线观看| 一本大道久久a久久精品综合| 国产成人影院| 最新中文字幕av专区| 日本成人在线视频网址| 国产偷国产偷精品高清尤物| 国产精品成人3p一区二区三区| a级黄色小视频| 伊人久久综合97精品| 久久精品国产99国产| 欧美草逼视频| 一区二区三区我不卡| 亚洲国产精品va在线看黑人| 日本亚洲视频在线| 日本不卡影院| 男插女免费视频| 国产亚洲欧美aaaa| 99国内精品久久| 成人av综合网| 成人永久免费网站| 国产欧美日韩精品在线观看| 欧美日韩一区二区免费在线观看| 中文字幕av亚洲精品一部二部| 东热在线免费视频| 日本成人黄色免费看| 亚洲精品国偷自产在线99热| 国产成人综合自拍| 日韩中文字幕视频网| 国产女优裸体网站| 国产精品自拍网| 欧美日韩在线三级| 久久综合综合久久综合| 欧美视频免费看| 成人亚洲一区二区三区| 91在线观看免费网站| 日韩午夜在线播放| 福利电影一区二区三区| 国产图片一区| 男人的天堂在线| 亚洲欧美国产精品桃花| 日韩最新在线视频| 亚洲小说欧美激情另类| 一区二区三区四区五区精品视频 | 国产精品美女一区二区三区| 一本久久青青| 永久av在线| 特级西西人体www高清大胆| 久久国产精品久久久| 亚洲精品成a人| 亚洲影院在线| 自拍偷拍亚洲| 尤物免费看在线视频| 亚洲国产精品综合| 欧美—级高清免费播放| 欧美亚洲一区二区在线观看| 国内精品久久久久影院一蜜桃| 哺乳一区二区三区中文视频 | 激情视频一区|