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

SpringCloud中Gateway的使用教程詳解

 更新時間:2022年08月10日 11:54:19   作者:JAVA道人  
SpringCloud?Gateway是Spring體系內(nèi)的一個全新項目,它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式。本文就來為大家詳細講講Gateway的使用教程,需要的可以參考一下

1.基礎(chǔ)教程

pom.xml

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
    </parent>
    <dependencies>
        <!--gateway不是通過servlet啟動的,不需要spring-boot-starter-web-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>
   
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2020.0.6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement> 

application.yml

server:
  port: 8081

springboot啟動類

@SpringBootApplication
public class GateWayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GateWayApplication.class,args);
    }
    @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p
                        .path("/**")
                        .filters(f -> f.addRequestParameter("aa","bb"))
                        .uri("http://localhost:18080"))

                .build();
    }
}

以上代碼,是做了個路由:如果url的path符合正則“/**”則給請求添加一個aa=bb的參數(shù)然后轉(zhuǎn)發(fā)到http://localhost:18080,。

如果訪問http://localhost:8081/get,則最終會請求http://localhost:18080/get?aa=bb

我們再添加一個route。

@SpringBootApplication
public class GateWayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GateWayApplication.class,args);
    }
    @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p ->p
                        .method("POST")
                        .uri("http://localhost:18081")
                )
                .route(p -> p
                        .path("/**")
                        .filters(f -> f.addRequestParameter("aa","bb"))
                        .uri("http://localhost:18080"))

                .build();
    }
}

以上代碼添加了一個如果是POST訪問,則轉(zhuǎn)發(fā)到http://localhost:18081。

那么如果我們使用POST的http://localhost:8081/aaa,則會轉(zhuǎn)發(fā)到http://localhost:18081/aaa.

值得注意的是,如果這兩個route換下位置,path=/** 的route放在method=post的上面,則會產(chǎn)生另外的情況,就是會轉(zhuǎn)發(fā)到18080上去,因為POST的http://localhost:8081/aaa也會匹配上/** .這些route是有先后順序的。

可以看出route有一個重要的概念,就是條件predicate,命中了什么條件就會被轉(zhuǎn)發(fā)到哪里。

Predicate來自于java8的接口。Predicate 接受一個輸入?yún)?shù),返回一個布爾值結(jié)果。該接口包含多種默認方法來將Predicate組合成其他復(fù)雜的邏輯(比如:與,或,非)。可以用于接口請求參數(shù)校驗、判斷新老數(shù)據(jù)是否有變化需要進行更新操作。add–與、or–或、negate–非。

Spring Cloud Gateway內(nèi)置了許多Predict,這些Predict的源碼在org.springframework.cloud.gateway.handler.predicate包中,如果讀者有興趣可以閱讀一下。現(xiàn)在列舉各種Predicate如下圖:

可以看到這有幾種類型的Predict,而我們剛剛使用的就是METHOD和Path這兩種,當然你可以選擇其他的。

2.將配置放在配置文件里

總是寫些Bean實際上還是不爽,不如我們放在配置文件里面。放配置文件里面可以減少代碼量,最重要的是,如果配合springcloudconfig,可以做到在線更新,這就很爽了。

我們將上面的那個bean注釋掉,然后把上面的寫到配置文件里。

server:
  port: 8081
spring:
  cloud:
    gateway:
      routes:
      - id: my_method_route
        uri: http://localhost:18081
        predicates:
        - Method=POST
      - id: my_path_route
        uri: http://localhost:18080
        predicates:
        - Path=/**

注意一些關(guān)鍵的地方,要約定大于配置比如:Method=POST Path=/**

3.放在springcloud里面

目前我們都是一個單機springboot,跟springcloud沒有關(guān)系。我們嘗試將這段配置放在nacos的config里面。

nacos新建gateway-test.yaml,類型yaml,內(nèi)容如下:

spring:
  cloud:
    gateway:
      routes:
      - id: my_path_route
        uri: http://localhost:18080
        predicates:
        - Path=/**
      - id: my_method_route
        uri: http://localhost:18081
        predicates:
        - Method=POST

java項目的pom修改下,添加了nacos的服務(wù)發(fā)現(xiàn)和配置文件。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
    </parent>
    <dependencies>
        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        
        <!--springboot2.4版本之后需要添加下面依賴才能加載bootstrap.yml-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>



        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2020.0.6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- SpringCloud Alibaba 微服務(wù) -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

添加bootstrap.yml,添加了nacos的一些配置

spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

修改application.yml

server:
  port: 8081
spring:
  profiles:
    active: test

此時

{{spring.application.name}}-{{spring.profiles.active}}.{{spring.cloud.nacos.config.file-extension}}

正好等于我們剛才在nacos上建的gateway-test.yaml

最后是java啟動執(zhí)行,發(fā)現(xiàn)gateway就從nacos拉取配置文件生效了。

4.使用服務(wù)名而不是IP

我們的uri轉(zhuǎn)發(fā)的都是具體的ip地址,那么真正在微服務(wù)的時候,肯定轉(zhuǎn)發(fā)的是服務(wù)名而不是ip地址。

修改gateway-test.yaml里面的uri,boot-cloud和boot-cloud1是我們創(chuàng)建的另兩個服務(wù)。

spring:
  cloud:
    gateway:
      routes:
      - id: my_path_route
        uri: lb://boot-cloud
        predicates:
        - Path=/**
      - id: my_method_route
        uri: lb://boot-cloud1
        predicates:
        - Method=POST

lb是對服務(wù)進行負載均衡的意思,需要添加依賴

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

啟動后,就可以對服務(wù)進行轉(zhuǎn)發(fā)了。

到此這篇關(guān)于SpringCloud中Gateway的使用教程詳解的文章就介紹到這了,更多相關(guān)SpringCloud Gateway內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合EasyExcel?3.x的完整示例

    SpringBoot整合EasyExcel?3.x的完整示例

    EasyExcel 是一個基于 Java 的、快速、簡潔、解決大文件內(nèi)存溢出的 Excel 處理工具,它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成 Excel 的讀、寫等功能,這篇文章主要介紹了SpringBoot整合EasyExcel3.x的過程,需要的朋友可以參考下
    2023-07-07
  • SpringBoot整合Logback日志框架及高并發(fā)下的性能優(yōu)化

    SpringBoot整合Logback日志框架及高并發(fā)下的性能優(yōu)化

    在現(xiàn)代的Java應(yīng)用開發(fā)中,日志記錄是不可或缺的一部分,Spring Boot作為目前最流行的Java開發(fā)框架之一,默認集成了Logback作為日志框架,Logback是Log4j的繼任者,具有更高的性能和更豐富的功能,本文將詳細介紹如何在Spring Boot中整合Logback日志框架
    2025-03-03
  • Java Socket一對多通信實現(xiàn)之并發(fā)處理方式

    Java Socket一對多通信實現(xiàn)之并發(fā)處理方式

    這篇文章主要介紹了Java Socket一對多通信實現(xiàn)之并發(fā)處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • java基于AES對稱加密算法實現(xiàn)的加密與解密功能示例

    java基于AES對稱加密算法實現(xiàn)的加密與解密功能示例

    這篇文章主要介紹了java基于AES對稱加密算法實現(xiàn)的加密與解密功能,結(jié)合完整實例形式分析了AES對稱加密算法的定義與使用技巧,需要的朋友可以參考下
    2017-01-01
  • Netty分布式pipeline管道創(chuàng)建方法跟蹤解析

    Netty分布式pipeline管道創(chuàng)建方法跟蹤解析

    這篇文章主要為大家介紹了Netty分布式pipeline管道創(chuàng)建方法跟蹤解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Spring常用一些工具類實例匯總

    Spring常用一些工具類實例匯總

    這篇文章主要介紹了Spring常用一些工具類實例匯總,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-12-12
  • 利用Redis實現(xiàn)延時處理的方法實例

    利用Redis實現(xiàn)延時處理的方法實例

    這篇文章主要給大家介紹了關(guān)于利用Redis實現(xiàn)延時處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者使用Redis具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧
    2019-03-03
  • java實現(xiàn) 二叉搜索樹功能

    java實現(xiàn) 二叉搜索樹功能

    這篇文章主要介紹了java實現(xiàn) 二叉搜索樹功能,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • java HashMap的keyset實例

    java HashMap的keyset實例

    簡單地說,在keyset方法返回的set上做修改會改變原來hashmap,這也許不是你想要的,于是形成一個隱藏的bug
    2013-04-04
  • IDEA中JDK是1.8但Java版本只有21和17的解決辦法

    IDEA中JDK是1.8但Java版本只有21和17的解決辦法

    JDK 1.8(Java Development Kit 1.8)是Java平臺的一個版本,它包含了用于開發(fā)和運行Java應(yīng)用程序的工具和庫,下面這篇文章主要給大家介紹了關(guān)于IDEA中JDK是1.8但Java版本只有21和17的解決辦法,需要的朋友可以參考下
    2024-01-01

最新評論

通化县| 平江县| 营山县| 称多县| 南木林县| 巴林左旗| 织金县| 额济纳旗| 阳曲县| 安义县| 平武县| 莎车县| 福鼎市| 昌都县| 泾川县| 永丰县| 宜丰县| 昌邑市| 东阿县| 泸溪县| 铜梁县| 阿克陶县| 潞城市| 迁西县| 唐山市| 翼城县| 绥德县| 高陵县| 招远市| 清河县| 曲水县| 日土县| 东至县| 景洪市| 介休市| 湘西| 马山县| 江门市| 山阴县| 德州市| 华蓥市|