欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Gateway的入門(mén)概述及主要功能

 更新時(shí)間:2024年04月29日 14:26:46   作者:易秋之  
Spring Gateway是Spring Cloud微服務(wù)生態(tài)下的網(wǎng)關(guān)組件,網(wǎng)絡(luò)層使用了基于非阻塞的 Netty使用異步IO增加了系統(tǒng)的性能,Gateway 是基于 Spring 5 和 Spring Boot 2 搭建的,這篇文章主要介紹了Spring Gateway的入門(mén)概述簡(jiǎn)介,需要的朋友可以參考下

1. 為什么要有網(wǎng)關(guān)

在微服務(wù)中,一般都會(huì)把相對(duì)獨(dú)立的業(yè)務(wù)或者功能劃分成一個(gè)獨(dú)立的服務(wù),做到業(yè)務(wù)或者功能之間的隔離,分開(kāi)部署。但是在請(qǐng)求到這些正式的服務(wù)的時(shí)候一般會(huì)有一些預(yù)前的處理,比如:權(quán)限校驗(yàn),流量控制,灰度發(fā)布等。如果這些都在各自的服務(wù)中去做,勢(shì)必會(huì)增加這些基礎(chǔ)功能的維護(hù)成本??傊褪切枰幸环N前置的組件去做公共的功能邏輯。

2. Spring Gateway

Spring Gateway 是 Spring Cloud 微服務(wù)生態(tài)下的網(wǎng)關(guān)組件,網(wǎng)絡(luò)層使用了基于非阻塞的 Netty使用異步IO增加了系統(tǒng)的性能。Gateway 是基于 Spring 5 和 Spring Boot 2 搭建的,本質(zhì)上是一個(gè) Spring Boot 應(yīng)用。

主要功能

  • 請(qǐng)求路由-最主要的功能

根據(jù)請(qǐng)求本身的屬性把請(qǐng)求轉(zhuǎn)發(fā)到不同的微服務(wù),使網(wǎng)關(guān)能夠根據(jù)請(qǐng)求的 header、路徑、參數(shù)、協(xié)議等屬性將其轉(zhuǎn)發(fā)到對(duì)應(yīng)的服務(wù)。

  • 服務(wù)發(fā)現(xiàn)-基礎(chǔ)功能

網(wǎng)關(guān)是微服務(wù)環(huán)境的請(qǐng)求入口。支持服務(wù)發(fā)現(xiàn)能使網(wǎng)關(guān)在轉(zhuǎn)發(fā)請(qǐng)求到目標(biāo)服務(wù)時(shí)充分利用服務(wù)注冊(cè)中心動(dòng)態(tài)管理服務(wù)實(shí)例的優(yōu)勢(shì),在配置路由轉(zhuǎn)發(fā)的目標(biāo)地址時(shí)也會(huì)更加方便

  • 修改請(qǐng)求響應(yīng)

網(wǎng)關(guān)在收到外部請(qǐng)求,將其轉(zhuǎn)發(fā)到目標(biāo)服務(wù)之前,可以根據(jù)需求對(duì)請(qǐng)求進(jìn)行修改,比如果更改請(qǐng)求 header、參數(shù)等。類(lèi)似地,也可以在獲取到業(yè)務(wù)服務(wù)響應(yīng)之后,返回給用戶(hù)前對(duì)響應(yīng)進(jìn)行修改。

  • 前置業(yè)務(wù)處理-權(quán)限校驗(yàn)

某些業(yè)務(wù)場(chǎng)景在處理用戶(hù)請(qǐng)求時(shí)需要先對(duì)用戶(hù)進(jìn)行權(quán)限校驗(yàn),這部分邏輯也可以由網(wǎng)關(guān)來(lái)負(fù)責(zé)。請(qǐng)求在到達(dá)網(wǎng)關(guān)時(shí),由網(wǎng)關(guān)根據(jù)請(qǐng)求要訪(fǎng)問(wèn)的業(yè)務(wù)接口先對(duì)用戶(hù)鑒權(quán),只有校驗(yàn)通過(guò)的請(qǐng)求才會(huì)轉(zhuǎn)發(fā)到對(duì)應(yīng)的服務(wù),而校驗(yàn)不通過(guò)的請(qǐng)求會(huì)被網(wǎng)關(guān)直接拒絕。這樣做能夠把拒絕無(wú)效請(qǐng)求這一步提前到網(wǎng)關(guān)這一層,減少無(wú)效的流量進(jìn)入到業(yè)務(wù)服務(wù)。

  • 限流熔斷

網(wǎng)關(guān)可以通過(guò)添加限流、熔斷等機(jī)制來(lái)對(duì)業(yè)務(wù)服務(wù)起保護(hù)作用,提升系統(tǒng)整體的可用性。根據(jù)業(yè)務(wù)服務(wù)的吞吐量,網(wǎng)關(guān)可以限制轉(zhuǎn)發(fā)到該服務(wù)的請(qǐng)求數(shù)量,超出限制的請(qǐng)求直接拒絕或降級(jí),這樣可以避免因?yàn)檫^(guò)多的請(qǐng)求導(dǎo)致業(yè)務(wù)服務(wù)負(fù)載過(guò)高的情況。當(dāng)業(yè)務(wù)服務(wù)異常時(shí),還可以通過(guò)熔斷的方式到達(dá)快速失敗的效果。

  • 請(qǐng)求重試

對(duì)于一些冪等的請(qǐng)求,當(dāng)網(wǎng)關(guān)轉(zhuǎn)發(fā)目標(biāo)服務(wù)失敗時(shí),可以在網(wǎng)關(guān)層做自動(dòng)重試。對(duì)于一些多實(shí)例部署服務(wù),重試時(shí)還可以考慮把請(qǐng)求轉(zhuǎn)發(fā)到不同的實(shí)例,以提高請(qǐng)求成功的概率。

  • 響應(yīng)緩存

當(dāng)用戶(hù)請(qǐng)求獲取的是一些靜態(tài)的或更新不頻繁的數(shù)據(jù)時(shí),一段時(shí)間內(nèi)多次請(qǐng)求獲取到的數(shù)據(jù)很可能是一樣的。對(duì)于這種情況可以將響應(yīng)緩存起來(lái)。這樣用戶(hù)請(qǐng)求可以直接在網(wǎng)關(guān)層得到響應(yīng)數(shù)據(jù),無(wú)需再去訪(fǎng)問(wèn)業(yè)務(wù)服務(wù),減輕業(yè)務(wù)服務(wù)的負(fù)擔(dān)。

  • 響應(yīng)聚合

某些情況下用戶(hù)請(qǐng)求要獲取的響應(yīng)內(nèi)容可能會(huì)來(lái)自于多個(gè)業(yè)務(wù)服務(wù)。網(wǎng)關(guān)作為業(yè)務(wù)服務(wù)的調(diào)用方,可以把多個(gè)服務(wù)的響應(yīng)整合起來(lái),再一并返回給用戶(hù)。

  • 監(jiān)控統(tǒng)計(jì)

因?yàn)榫W(wǎng)關(guān)是請(qǐng)求入口,所以在網(wǎng)關(guān)這一層可以方便地對(duì)外部的訪(fǎng)問(wèn)請(qǐng)求做監(jiān)控和統(tǒng)計(jì),同時(shí)還可以對(duì)業(yè)務(wù)服務(wù)的響應(yīng)做監(jiān)控,方便發(fā)現(xiàn)異常情況。

  • 灰度發(fā)布

網(wǎng)關(guān)可以用來(lái)做服務(wù)流量的灰度切換。比如某個(gè)業(yè)務(wù)服務(wù)上線(xiàn)了新版本,那可以在網(wǎng)關(guān)這一層按照灰度策略,把一部分請(qǐng)求流量切換到新版本服務(wù)上,以達(dá)到驗(yàn)證新版本業(yè)務(wù)服務(wù)的功能和性能的效果。

  • 異常響應(yīng)處理

對(duì)于業(yè)務(wù)服務(wù)返回的異常響應(yīng),可以在網(wǎng)關(guān)層在返回給用戶(hù)之前做轉(zhuǎn)換處理。這樣可以把一些業(yè)務(wù)側(cè)返回的異常細(xì)節(jié)隱藏,轉(zhuǎn)換成用戶(hù)友好的錯(cuò)誤提示返回。

3. 路由配置

路由是 Gateway 的核心構(gòu)件,不同的路由根據(jù)匹配條件可以處理不同類(lèi)型的請(qǐng)求,并轉(zhuǎn)發(fā)到對(duì)應(yīng)的目標(biāo)服務(wù)。一個(gè)路由由以下幾個(gè)屬性組成
Id: 路由 ID。
Uri: 轉(zhuǎn)發(fā)請(qǐng)求的目標(biāo)地址。
Order: 順序(優(yōu)先級(jí))。
Predicate: 匹配條件。
Metadata: 額外的元數(shù)據(jù)。

多個(gè) Predicates 會(huì)合并成一個(gè)聚合的條件。Filters: 路由過(guò)濾器。這些過(guò)濾器最終會(huì)和全局過(guò)濾器一起排序處理匹配成功的請(qǐng)求。

Spring Cloud Gateway 本身提供了很多 Predicate 和 Filter 的實(shí)現(xiàn),一些基本的功能可以通過(guò)這些現(xiàn)成的 Predicate 和 Filter 配置實(shí)現(xiàn)。
4. 實(shí)操

代碼配置:

@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
  return builder.routes()
  //第一個(gè)配置
    .route(r -> r.host("**.abc.org").and().path("/image/png")
        .filters(f ->
            f.addResponseHeader("X-TestHeader", "foobar"))
        .uri("http://foo.org:80")
    )
   // 第二個(gè)配置
    .route(r -> r.path("/image/webp")
        .filters(f -> f
            .addRequestHeader("X-TestHeader", "baz")
            .addRequestParameter("test-param", "value"))
        .uri("http://bar.org:80")
        .metadata("key", "value")
    )
    .build();
}

配置文件配置

spring:
  cloud:  
        gateway:
            discovery:
                locator:
                enabled: true
            routes:
            - id: activity-route
             uri: lb://activity
             predicates:
                - Path=/activity/**
                filters:
                - StripPrefix=1

注意: Gateway默認(rèn)轉(zhuǎn)發(fā)是全路徑的,設(shè)置StripPrefix=1表示從二級(jí)url路徑轉(zhuǎn)發(fā),即http://localhost:port/activity/test將會(huì)轉(zhuǎn)發(fā)到http://{activity}/test

4. 總結(jié)

Spring Cloud Gateway 是 Spring Cloud 微服務(wù)生態(tài)中的 Gateway 組件。作為 Spring Cloud Zuul 的替代,Gateway 采用了性能的更高的 Netty 作為網(wǎng)絡(luò)層服務(wù)器。Gateway 本身提供了很多常用的 Predicates 和 Filters 實(shí)現(xiàn),能滿(mǎn)足大部分常見(jiàn)需求。同時(shí) Gateway 也支持 Spring Cloud 生態(tài)下其他組件如 Eureka 等的交互,使用起來(lái)非常方便。

參考資料:

https://blog.csdn.net/Extraordinarylife/article/details/115168526

到此這篇關(guān)于Spring Gateway的入門(mén)概述簡(jiǎn)介的文章就介紹到這了,更多相關(guān)Spring Gateway入門(mén)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java搜索與圖論之DFS和BFS算法詳解

    Java搜索與圖論之DFS和BFS算法詳解

    DFS指在進(jìn)行算法運(yùn)算時(shí),優(yōu)先將該路徑的當(dāng)前路徑執(zhí)行完畢,執(zhí)行完畢或失敗后向上回溯嘗試其他途徑。BFS指在進(jìn)行算法運(yùn)算時(shí),優(yōu)先將當(dāng)前路徑點(diǎn)的所有情況羅列出來(lái),然后根據(jù)羅列出來(lái)的情況羅列下一層。本文介紹了二者的實(shí)現(xiàn)與應(yīng)用,需要的可以參考一下
    2022-11-11
  • autoMapping和autoMappingBehavior的區(qū)別及說(shuō)明

    autoMapping和autoMappingBehavior的區(qū)別及說(shuō)明

    這篇文章主要介紹了autoMapping和autoMappingBehavior的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java實(shí)現(xiàn)統(tǒng)計(jì)在線(xiàn)人數(shù)功能的方法詳解

    Java實(shí)現(xiàn)統(tǒng)計(jì)在線(xiàn)人數(shù)功能的方法詳解

    很多人在筆試或者面試中問(wèn)到:現(xiàn)在要你實(shí)現(xiàn)一個(gè)統(tǒng)計(jì)在線(xiàn)人數(shù)的功能,你該怎么設(shè)計(jì)?不知道的朋友,這篇文章就來(lái)告訴你具體實(shí)現(xiàn)方法
    2022-08-08
  • java開(kāi)發(fā)非公平鎖不可打斷源碼示例解析

    java開(kāi)發(fā)非公平鎖不可打斷源碼示例解析

    這篇文章主要為大家介紹了java開(kāi)發(fā)非公平鎖不可打斷源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • spring拓展之如何定義自己的namespace

    spring拓展之如何定義自己的namespace

    這篇文章主要介紹了spring拓展之如何定義自己的namespace方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java Web開(kāi)發(fā)防止多用戶(hù)重復(fù)登錄的完美解決方案

    Java Web開(kāi)發(fā)防止多用戶(hù)重復(fù)登錄的完美解決方案

    在web項(xiàng)目開(kāi)發(fā)中,很多情況下都可以讓同一個(gè)賬號(hào)信息在不同的登錄入口登錄很多次,這樣子做的不是很完善。一般解決這種情況有兩種解決方案,小編呢主要以第二種方式給大家介紹具體的實(shí)現(xiàn)方法,對(duì)java web 防止多用戶(hù)重復(fù)登錄的解決方案感興趣的朋友一起看看吧
    2016-11-11
  • Spring常用注解匯總

    Spring常用注解匯總

    這篇文章主要介紹了Spring常用注解匯總,需要的朋友可以參考下
    2014-08-08
  • 淺談String類(lèi)型等值比較引起的“==”、“equals()”和“hashCode”思考

    淺談String類(lèi)型等值比較引起的“==”、“equals()”和“hashCode”思考

    這篇文章主要介紹了淺談String類(lèi)型等值比較引起的“==”、“equals()”和“hashCode”思考。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • springboot使用國(guó)產(chǎn)加密算法方式,sm2和sm3加解密demo

    springboot使用國(guó)產(chǎn)加密算法方式,sm2和sm3加解密demo

    這篇文章主要介紹了springboot使用國(guó)產(chǎn)加密算法方式,sm2和sm3加解密demo,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例

    關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例

    這篇文章主要介紹了關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論