最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud?GateWay路由網(wǎng)關(guān)與Config配置中心詳解

 更新時(shí)間:2026年03月24日 08:44:13   作者:NE_STOP  
文章主要介紹了SpringCloud?Gateway路由網(wǎng)關(guān)的部署與配置,包括添加路由、配置路由過濾器、編寫全局過濾器等步驟,還介紹了配置中心的使用方法,包括創(chuàng)建配置中心和客戶端配置,以及CAP理論的應(yīng)用場景和特點(diǎn),感興趣的朋友跟隨小編一起看看吧

 GateWay路由網(wǎng)關(guān)

一般情況下,不是所有微服務(wù)都需要直接暴露給外部調(diào)用,這時(shí)可以使用路由機(jī)制,添加一層防護(hù),讓所有請求全部通過路由來轉(zhuǎn)發(fā)到各個(gè)微服務(wù),并且轉(zhuǎn)發(fā)給多個(gè)微服務(wù)實(shí)例也可以實(shí)現(xiàn)負(fù)載均衡。

部署網(wǎng)關(guān)步驟如下:

創(chuàng)建一個(gè)新模塊,添加如下依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

編寫配置文件

server:
  port: 8500
spring:
  application:
    name: gateway-service
eureka:
  # 修改客戶端設(shè)置
  client:
    # 指向eureka服務(wù)端
    service-url:
      defaultZone: http://localhost:8801/eureka,http://localhost:8802/eureka

編寫啟動(dòng)類

@SpringBootApplication
public class AppGateway
{
    public static void main( String[] args )
    {
        SpringApplication.run(AppGateway.class, args);
    }
}

這時(shí)就可以啟動(dòng)網(wǎng)關(guān)服務(wù)了。

配置路由服務(wù):

spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      # 配置路由,這是一個(gè)列表
      routes:
      - id: borrow-service  # 路由名稱
        uri: lb://borrow-service # 路由的地址,lb表示使用負(fù)載均衡到微服務(wù)。也可以使用HTTP正常轉(zhuǎn)發(fā)
        predicates: # 路由規(guī)則,斷言什么請求會(huì)被路由
        - Path=/borrow/** #只要是訪問這個(gè)路徑,一律都都被路由到上面指定的服務(wù)

此時(shí),當(dāng)我們訪問借閱服務(wù)時(shí),可以直接訪問http://localhost:8500/borrow/1 此時(shí)會(huì)通過網(wǎng)關(guān)訪問borrow-service服務(wù)。

而且使用原來的地址http://localhost:8301/borrow/1 也可以訪問。

路由過濾器

路由過濾器支持以某種方式修改傳入的HTTP請求或返回的HTTP響應(yīng),路由過濾器的范圍是某一個(gè)理由,跟之前的斷言一樣。Spring Cloud Gateway 內(nèi)置很多的路由過濾器。

比如我們希望在請求到達(dá)時(shí),在請求頭中添加一些信息再轉(zhuǎn)發(fā)給我們的服務(wù),這時(shí)候就可以使用路由過濾器來完成,只需要對配置文件進(jìn)行修改:

spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      # 配置路由,這是一個(gè)列表
      routes:
      - id: borrow-service  # 路由名稱
        uri: lb://borrow-service # 路由的地址,lb表示使用負(fù)載均衡到微服務(wù)。也可以使用HTTP正常轉(zhuǎn)發(fā)
        predicates: # 路由規(guī)則,斷言什么請求會(huì)被路由
        - Path=/borrow/** #只要是訪問這個(gè)路徑,一律都都被路由到上面指定的服務(wù)
      # 繼續(xù)添加新的路由配置,這里以書籍管理服務(wù)為例
      - id: book-service
        uri: lb://book-service
        predicates:
        - Path=/book/**
        filters: # 添加過濾器
          # 添加請求頭信息
        - AddRequestHeader=Test, HelloWorld!

此時(shí)通過網(wǎng)關(guān)訪問book-service服務(wù),會(huì)自動(dòng)給請求頭添加Test=HelloWorld! 信息。

訪問地址是:http://localhost:8500/book/1

除了針對某一個(gè)路由配置過濾器之外,也可以自定義全局過濾器。但是需要我們編寫代碼,比如要實(shí)現(xiàn)攔截沒有攜帶指定請求參數(shù)的請求(在gateway網(wǎng)關(guān)項(xiàng)目中編寫一個(gè)類實(shí)現(xiàn)GlobalFilter接口):

@Component
public class TestFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 先獲取ServerHttpRequest 對象,這里不是HttpServletRequest
        ServerHttpRequest request = exchange.getRequest();
        // 獲取所有請求的參數(shù)
        MultiValueMap<String, String> queryParams = request.getQueryParams();
        // 判斷是否包含test參數(shù)
        List<String> test = queryParams.get("test");
        if (test != null && test.contains("1")) {
            // 將ServerWebExchange對象傳遞到下一個(gè)過濾連
            return chain.filter(exchange);
        }else{
            // 不再向下傳遞,直接返回響應(yīng)
            return exchange.getResponse().setComplete();
        }
    }
}

然后重啟gateway服務(wù)即可生效。

過濾器可以存在多個(gè),我們可以指定過濾器之間的順序,需要編寫一個(gè)類,實(shí)現(xiàn)Ordered接口:

@Component
public class TestFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 先獲取ServerHttpRequest 對象,這里不是HttpServletRequest
        ServerHttpRequest request = exchange.getRequest();
        // 獲取所有請求的參數(shù)
        MultiValueMap<String, String> queryParams = request.getQueryParams();
        // 判斷是否包含test參數(shù)
        List<String> test = queryParams.get("test");
        if (test != null && test.contains("1")) {
            // 將ServerWebExchange對象傳遞到下一個(gè)過濾連
            return chain.filter(exchange);
        }else{
            // 不再向下傳遞,直接返回響應(yīng)
            return exchange.getResponse().setComplete();
        }
    }
    // 指定此過濾器的優(yōu)先級,值越小,優(yōu)先級越高
    @Override
    public int getOrder() {
        return 0;
    }
}

order值越小,優(yōu)先級越高。無論全局過濾器還是配置文件中的單個(gè)過濾器,都受到order值的影響(單個(gè)路由過濾器order值從上往下的順序從1開始遞增),最終都是按order順序執(zhí)行。當(dāng)order一樣是,全局過濾器優(yōu)先于單獨(dú)的路由過濾器。

Config配置中心

微服務(wù)項(xiàng)目需要部署很多個(gè)實(shí)例,每個(gè)實(shí)例都有自己的配置文件,這樣手動(dòng)改起來非常麻煩,這時(shí)就需要一種配置文件管理工具,集中的對配置文件進(jìn)行配置。

Spring cloud Config 為分布式系統(tǒng)中的外部配置提供服務(wù)器端和客戶端的支持。使用Config Server 集中管理所有環(huán)境中應(yīng)用程序的外部配置。

實(shí)際上 Spring Cloud Config就是一個(gè)配置中心,所有的服務(wù)都可以從配置中心取出配置,而配置中心又可以從Github遠(yuǎn)程倉庫中獲取云端的配置文件,這樣只需要修改Github中的配置就可以對所有服務(wù)進(jìn)行配置管理。

部署配置中心的步驟如下:

新建一個(gè)模塊,并導(dǎo)入依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

編寫啟動(dòng)類

@SpringBootApplication
@EnableConfigServer
public class AppConfig
{
    public static void main( String[] args )
    {
        SpringApplication.run(AppConfig.class, args);
    }
}

編寫配置文件

server:
  port: 8700
spring:
  application:
    name: config-service
eureka:
  # 修改客戶端設(shè)置
  client:
    # 指向eureka服務(wù)端
    service-url:
      defaultZone: http://localhost:8801/eureka,http://localhost:8802/eureka

創(chuàng)建一個(gè)git本地倉庫,然后再文件夾中創(chuàng)建一些配置文件,名稱最好是【服務(wù)名稱】-【環(huán)境】.yml.

然后將配置信息寫入配置文件中,然后提交文件。

修改git配置信息

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          # 這里是本地倉庫地址,遠(yuǎn)程倉庫的話直接填寫遠(yuǎn)程倉庫地址http://git....
          uri: file://D:/1_ali/code/springCloudConfig
          # 設(shè)置默認(rèn)分支
          default-label: master

然后啟動(dòng)config服務(wù),可通過以下格式訪問:

客戶端配置

現(xiàn)在可以從服務(wù)器端讀取配置,可以刪除本地的application.yml文件(也可以不刪除,這樣服務(wù)器配置和本地配置都會(huì)加載),改用bootstrap.yml(在application.yml之前加載)。

先在微服務(wù)模塊引入相關(guān)依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

編輯bootstrap.yml文件內(nèi)容:

spring:
  cloud:
    config:
      # 名稱,其實(shí)就是文件名稱
      name: book-service
      # 配置服務(wù)器的地址
      uri: http://localhost:8700
      # 環(huán)境
      profile: dev
      # 分支
      label: master

啟動(dòng)服務(wù)即可生效。

微服務(wù)CAP原則

CAP原則又稱CAP定理,指在一個(gè)分布式系統(tǒng)中,存在Consistency(一致性)、Availability(可用性)、Partition tolerance(分區(qū)容錯(cuò)性),三者不可同時(shí)保證。最多只能保證其中的兩者。

一致性(C):分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時(shí)刻都是同樣的值(所有節(jié)點(diǎn)無論何時(shí)訪問都能拿到最新的值)

可用性(A): 系統(tǒng)中非故障節(jié)點(diǎn)收到的每個(gè)請求都必須得到響應(yīng)

分區(qū)容錯(cuò)性(P): 分布式系統(tǒng)中,節(jié)點(diǎn)之間的網(wǎng)絡(luò)是連通的,然而可能因?yàn)橐恍┕收希ňW(wǎng)絡(luò)丟包),使節(jié)點(diǎn)之間不連通,導(dǎo)致整個(gè)網(wǎng)絡(luò)分成了幾塊區(qū)域,數(shù)據(jù)就散布在了這些不聯(lián)通的區(qū)域中(這樣可能會(huì)導(dǎo)致某些分區(qū)節(jié)點(diǎn)的數(shù)據(jù)訪問失敗,我們需要容忍這些不可靠的情況)。

總的來說,數(shù)據(jù)存放的節(jié)點(diǎn)越多,分區(qū)容忍性越高,但是復(fù)制更新的次數(shù)就越多,一致性就會(huì)降低。同時(shí)為了保持一致性,更新所有節(jié)點(diǎn)數(shù)據(jù)所需要的時(shí)間就越長,那么可用性就會(huì)降低。

所以說,只能存在以下三種方案:

選型特點(diǎn)典型系統(tǒng)適用場景
CP分區(qū)時(shí)強(qiáng)一致,但可能拒絕請求(不可用)ZooKeeper、etcd、HBase金融、支付、配置中心
AP分區(qū)時(shí)高可用,但數(shù)據(jù)可能不一致(最終一致)Cassandra、DynamoDB、Redis 集群電商、社交、緩存
CA放棄 P,僅在無分區(qū)時(shí)同時(shí)滿足 C 和 A單機(jī)數(shù)據(jù)庫、小型局域網(wǎng)非分布式、無網(wǎng)絡(luò)風(fēng)險(xiǎn)場景

到此這篇關(guān)于SpringCloud GateWay路由網(wǎng)關(guān)與Config配置中心的文章就介紹到這了,更多相關(guān)SpringCloud GateWay路由網(wǎng)關(guān)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類生成json方式

    Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類生成json方式

    這篇文章主要介紹了Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類生成json,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 解讀CompletableFuture異步多線程的使用方式

    解讀CompletableFuture異步多線程的使用方式

    這篇文章主要介紹了CompletableFuture異步多線程的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中實(shí)現(xiàn)可拖放圖片剪裁入門教程

    Java中實(shí)現(xiàn)可拖放圖片剪裁入門教程

    這篇文章主要介紹了Java中實(shí)現(xiàn)可拖放圖片剪裁入門教程,本文寫給新手,分步驟講解如何實(shí)現(xiàn)圖片裁剪,并對每步的代碼作注釋,需要的朋友可以參考下
    2015-01-01
  • 詳解java爬蟲jsoup解析多空格class數(shù)據(jù)

    詳解java爬蟲jsoup解析多空格class數(shù)據(jù)

    在本篇內(nèi)容中小編給大家分享了java爬蟲jsoup怎么解析多空格class數(shù)據(jù)的方法和技巧,需要的朋友們跟著學(xué)習(xí)下。
    2018-12-12
  • Java實(shí)現(xiàn)圓形碰撞檢測

    Java實(shí)現(xiàn)圓形碰撞檢測

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圓形碰撞檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • springboot使用jasypt加密庫實(shí)現(xiàn)數(shù)據(jù)庫加解密示例代碼

    springboot使用jasypt加密庫實(shí)現(xiàn)數(shù)據(jù)庫加解密示例代碼

    這篇文章主要給大家介紹了關(guān)于springboot使用jasypt加密庫實(shí)現(xiàn)數(shù)據(jù)庫加解密的相關(guān)資料,Jasypt是一個(gè)用于配置文件加密的Java庫,它可以用來加密和解密配置文件中的敏感信息,如數(shù)據(jù)庫密碼、API?密鑰等,需要的朋友可以參考下
    2024-04-04
  • Java設(shè)計(jì)模式--代理模式

    Java設(shè)計(jì)模式--代理模式

    代理就是一個(gè)人或者一個(gè)機(jī)構(gòu)代表另一個(gè)人或者另一個(gè)機(jī)構(gòu)采取行動(dòng)。在一些情況下,一個(gè)客戶不想或者不能夠直接引用一個(gè)對象,而代理對象可以在客戶端和目標(biāo)對象之前起到中介的作用
    2021-07-07
  • Maven配置倉庫、阿里云鏡像、環(huán)境變量(史上最全)

    Maven配置倉庫、阿里云鏡像、環(huán)境變量(史上最全)

    本文主要介紹了Maven配置倉庫、阿里云鏡像、環(huán)境變量,文中通過圖文示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊(duì)列)詳解

    Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊(duì)列)詳解

    堆(優(yōu)先隊(duì)列)是一種典型的數(shù)據(jù)結(jié)構(gòu),其形狀是一棵完全二叉樹,一般用于求解topk問題。本文將利用Java語言實(shí)現(xiàn)堆,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • Java Servlet 運(yùn)行原理分析

    Java Servlet 運(yùn)行原理分析

    這篇文章主要介紹了Java Servlet 運(yùn)行原理分析,幫助大家更好的理解和學(xué)習(xí)Java Servlet的相關(guān)知識,感興趣的朋友可以了解下
    2020-11-11

最新評論

错那县| 衡阳市| 新龙县| 寻乌县| 车致| 轮台县| 简阳市| 屏东市| 临安市| 峡江县| 潼南县| 广灵县| 孝义市| 荆州市| 齐齐哈尔市| 怀远县| 吉水县| 库尔勒市| 正阳县| 青铜峡市| 翁源县| 四会市| 旬阳县| 芦溪县| 沅陵县| 丹江口市| 武陟县| 松溪县| 资阳市| 巴南区| 高邑县| 吉水县| 新民市| 蒲城县| 利川市| 泗阳县| 丹阳市| 安庆市| 乐至县| 滨海县| 阜南县|