偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

微服務(wù)網(wǎng)關(guān)升級:Spring Cloud Gateway 整合 Nacos 實現(xiàn)服務(wù)請求自動轉(zhuǎn)發(fā)+負載均衡!

開發(fā) 架構(gòu)
Spring Cloud Gateway 提供了一種默認轉(zhuǎn)發(fā)的能力,只要將 Spring Cloud Gateway 注冊到服務(wù)中心,Spring Cloud Gateway 默認就會自動代理服務(wù)中心的所有服務(wù),并以服務(wù)名作為目標 URI 來自動創(chuàng)建動態(tài)路由。

一、背景介紹

本文將繼續(xù)研究 Gateway 的更高級用法,比如整合服務(wù)注冊中心實現(xiàn)請求自動路由轉(zhuǎn)發(fā)、整合服務(wù)配置中心實現(xiàn)路由規(guī)則動態(tài)加載等。

下面我們一起來看看相關(guān)的實現(xiàn)思路。

二、整合注冊中心

在上篇文章中,我們介紹了在 Spring Cloud Gateway 中通過配置的方式就可實現(xiàn)將請求轉(zhuǎn)發(fā)到某個目標服務(wù)上。而在微服務(wù)架構(gòu)中,服務(wù)中心往往注冊了很多服務(wù),如果每個服務(wù)都進行單獨配置的話,那這份工作無疑既勞累又枯燥。

實際上,Spring Cloud Gateway 提供了一種默認轉(zhuǎn)發(fā)的能力,只要將 Spring Cloud Gateway 注冊到服務(wù)中心,Spring Cloud Gateway 默認就會自動代理服務(wù)中心的所有服務(wù),并以服務(wù)名作為目標 URI 來自動創(chuàng)建動態(tài)路由。

整個服務(wù)體系的工作流程就會變成如下圖。

圖片圖片

下面我們以 Nacos 作為服務(wù)注冊為例,通過具體的案例看看如何使用 Spring Cloud Gateway 來實現(xiàn)將服務(wù)請求進行轉(zhuǎn)發(fā)的效果。

在構(gòu)建服務(wù)網(wǎng)關(guān)之前,需要先部署并啟動 Nacos,這一步比較簡單,在此就不重復(fù)介紹了。如果還不會的小伙伴,可以參考之前寫過的 Nacos 作為服務(wù)注冊中心的技術(shù)文章。

2.1、構(gòu)建服務(wù)網(wǎng)關(guān)

使用 Spring Cloud Gateway 來構(gòu)建服務(wù)網(wǎng)關(guān)也非常簡單,之前我們已經(jīng)詳細介紹過,將之前創(chuàng)建的gateway-server復(fù)制一個新服務(wù)網(wǎng)關(guān)工程,命名為gateway-nacos,并在pom.xml中引入 Nacos 注冊中心依賴包,示例如下:

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
    <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>
</properties>

<dependencies>
    <!-- 引入 Spring Cloud Gateway 網(wǎng)關(guān)組件 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!-- 引入 Spring Cloud Alibaba Nacos 作為注冊中心 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <!-- 引入 springBoot 版本號 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- 引入 spring cloud 版本號 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- 引入 spring cloud alibaba 適配的版本號 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.2、修改配置文件

修改application.yaml配置文件,增加 Nacos 注冊中心相關(guān)的配置項。

完整配置如下:

server:
  port: 8080

spring:
  application:
    name: gateway-nacos
  cloud:
    # Spring Cloud Gateway 配置項,對應(yīng) GatewayProperties 類
    gateway:
      # 與 Spring Cloud 注冊中心的集成,對應(yīng) DiscoveryLocatorProperties 類
      discovery:
        locator:
          enabled: true   # 是否開啟,默認為 false 關(guān)閉
          url-expression: "'lb://' + serviceId"  # 路由的目標地址的表達式,默認為"'lb://' + serviceId"
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848  # Nacos 服務(wù)器地址

關(guān)鍵參數(shù)作用解讀:

  • nacos.discovery.server-addr:顧名思義,使用 Nacos 作為 Spring Cloud  的服務(wù)注冊中心
  • gateway.discovery.locator.enabled:是否開啟與 Spring Cloud 注冊中心的集成功能,默認false,這里需要開啟
  • gateway.discovery.locator.url-expression:路由的目標地址的 Spring EL 表達式,默認為"'lb://' + serviceId"

可能大家對url-expression這個配置項不太理解,我們來舉個例子。

假設(shè)注冊中心有user-serviceorder-service兩個服務(wù),url-expression這個配置項最終效果和如下配置等價:

spring:
  cloud:
    gateway:
      routes:
        - id: ReactiveCompositeDiscoveryClient_user-service
          uri: lb://user-service
          predicates:
            - Path=/user-service/**
          filters:
            - RewritePath=/user-service/(?<remaining>.*), /${remaining}
        - id: ReactiveCompositeDiscoveryClient_order-service
          uri: lb://order-service
          predicates:
            - Path=/order-service/**
          filters:
            - RewritePath=/order-service/(?<remaining>.*), /${remaining}

其中uri: lb://user-service表達式是user-service服務(wù)實例地址的一種簡寫,lb://前綴表示將請求以負載均衡方式轉(zhuǎn)發(fā)到對應(yīng)的目標服務(wù)實例上。

2.3、構(gòu)建業(yè)務(wù)微服務(wù)

為了方便測試服務(wù)的路由效果,我們還需要創(chuàng)建一個 Spring Boot 服務(wù),并將服務(wù)注冊到 Nacos,實現(xiàn)方式也很簡單,只需如下幾步即可完成。

首先,創(chuàng)建一個 SpringBoot 工程,命名為user-service,其pom.xml與上文類似,修改dependencies內(nèi)容,改成如下內(nèi)容即可。

<dependencies>
    <!-- SpringBoot web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Nacos 服務(wù)發(fā)現(xiàn) -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

然后,創(chuàng)建一個服務(wù)啟動類并添加@EnableDiscoveryClient,將當(dāng)前服務(wù)注冊到 Nacos。

@EnableDiscoveryClient
@SpringBootApplication
public class Application {

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

接著,創(chuàng)建一個 web 接口,以便測試服務(wù)的轉(zhuǎn)發(fā)效果,示例如下:

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "hello,我是用戶服務(wù)";
    }
}

最后,創(chuàng)建application.properties配置文件中添加服務(wù)注冊中心地址,示例如下:

spring.application.name=user-service
server.port=9010

# 設(shè)置Nacos的服務(wù)地址,多個地址可使用【,】分隔
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

2.4、服務(wù)測試

將服務(wù)網(wǎng)關(guān)和user-service都啟動起來,訪問 Nacos 服務(wù)控制臺,可以看到服務(wù)的注冊信息。

圖片圖片

Spring Cloud Gateway 注冊到服務(wù)中心之后,網(wǎng)關(guān)會自動代理所有注冊中心的服務(wù),訪問這些服務(wù)的方式為:

http://網(wǎng)關(guān)地址:端口/服務(wù)中心注冊 serviceId/具體服務(wù)接口的url

比如,訪問http://127.0.0.1:8080/user-service/hello,它會自動轉(zhuǎn)發(fā)到user-service服務(wù)的/hello接口上,返回結(jié)果如下圖。

圖片圖片

當(dāng)一個服務(wù)在多個機器上部署時,服務(wù)網(wǎng)關(guān)會依次輪流請求,實現(xiàn)負載均衡的效果。

三、整合配置中心

在上文中,Spring Cloud Gateway 整合服務(wù)注冊中心之后,會自動代理所有注冊中心的服務(wù)。

但是很多時候,我們并不想通過網(wǎng)關(guān)把服務(wù)都暴露出去,每個服務(wù)的路由規(guī)則可能不同,會存在配置不同過濾器的情況,并且可能需要經(jīng)常經(jīng)常調(diào)整,這個時候如何處理呢?

此時可以借助服務(wù)配置中心,將路由規(guī)則從服務(wù)網(wǎng)關(guān)中抽離出來,通過配置中心實現(xiàn)服務(wù)網(wǎng)關(guān)動態(tài)加載路由規(guī)則。

Spring Cloud 支持的配置中心組件有很多,比如 Config、Apollo、Nacos 等。其中 Nacos 應(yīng)用比較廣泛,因為它既可以做服務(wù)注冊中心又可以做服務(wù)配置中心。

下面我們還是以 Nacos 作為服務(wù)配置中心為例,通過具體的案例看看如何使用 Spring Cloud Gateway 來實現(xiàn)將路由規(guī)則動態(tài)加載效果。

3.1、構(gòu)建服務(wù)網(wǎng)關(guān)

還是以上文的gateway-nacos服務(wù)網(wǎng)關(guān)工程為例,復(fù)制一個新的服務(wù)網(wǎng)關(guān)工程,命名為gateway-application,并在pom.xml中引入 Nacos 配置中心依賴包,示例如下:

<dependencies>
    <!-- 引入 Spring Cloud Gateway 網(wǎng)關(guān)組件 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!-- 引入 Spring Cloud Alibaba Nacos 作為注冊中心 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- 引入 Spring Cloud Alibaba Nacos 作為配置中心 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
</dependencies>

3.2、修改配置文件

因為Nacos配置中心的配置項,只有在bootstrap.yaml才能生效。

application.yaml文件修改成bootstrap.yaml文件,并添加Nacos配置中心相關(guān)的配置項。

配置內(nèi)容如下:

server:
  port: 8080

spring:
  application:
    name: gateway-application
  cloud:
    nacos:
      # Nacos 作為注冊中心
      discovery:
        server-addr: 127.0.0.1:8848
      # Nacos 作為配置中心,對應(yīng) NacosConfigProperties 配置屬性類
      config:
        server-addr: 127.0.0.1:8848 # Nacos 服務(wù)器地址
        namespace:           # 對應(yīng) Nacos 的命名空間,默認為 null
        group: DEFAULT_GROUP # 對應(yīng) Nacos 配置分組,默認為 DEFAULT_GROUP
        name: gateway-config # 對應(yīng) Nacos 配置集的 dataId,默認為 spring.application.name
        file-extension: yaml

在上文中,我們配置了一個dataIdgateway-config,所屬分組為DEFAULT_GROUP的配置文件。

接著,在 nacos 配置中心創(chuàng)建對應(yīng)的配置項并發(fā)布,示例如下:

圖片圖片

配置內(nèi)容為:

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/user-service/**
          filters:
            - RewritePath=/user-service/(?<remaining>.*), /${remaining}

當(dāng)網(wǎng)關(guān)啟動時會自動將 Nacos 中配置中心中的路由規(guī)則內(nèi)容載入到服務(wù)容器中,并自動進行刷新。

3.3、服務(wù)測試

最后將網(wǎng)關(guān)服務(wù)啟動,再次訪問http://127.0.0.1:8080/user-service/hello,會自動轉(zhuǎn)發(fā)到user-service服務(wù)的/hello接口上。

圖片圖片

回到 Nacos 配置中心頁面修改路由規(guī)則,將/user-service路徑改成/user

圖片圖片

然后訪問http://127.0.0.1:8080/user/hello,返回結(jié)果如下圖。

圖片圖片

可以清晰的看到,服務(wù)網(wǎng)關(guān)中的路由規(guī)則也被動態(tài)刷新了。

四、小結(jié)

最后總結(jié)一下,Spring Cloud Gateway 是一個功能非常強大的服務(wù)網(wǎng)關(guān),在微服務(wù)架構(gòu)中通常與服務(wù)注冊中心和配置中心搭配使用,以此完成服務(wù)接口的統(tǒng)一請求轉(zhuǎn)發(fā)效果。

五、參考

1.https://www.iocoder.cn/Spring-Cloud/Spring-Cloud-Gateway/?self

責(zé)任編輯:武曉燕 來源: 潘志的技術(shù)筆記
相關(guān)推薦

2024-08-05 10:03:53

2023-11-09 08:31:56

Spring微服務(wù)網(wǎng)關(guān)

2022-05-12 08:21:13

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

2017-09-04 16:15:44

服務(wù)網(wǎng)關(guān)架構(gòu)

2022-09-01 08:17:15

Gateway微服務(wù)網(wǎng)關(guān)

2023-09-12 07:19:06

微服務(wù)網(wǎng)關(guān)架構(gòu)

2017-09-09 23:15:20

Spring Clou微服務(wù)架構(gòu)路由

2017-09-15 23:29:53

Spring Clou微服務(wù)架構(gòu)過濾器

2023-02-28 08:57:06

Spring上下線緩存

2024-05-13 18:35:06

負載均衡主機端口

2018-12-19 15:05:55

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

2022-05-16 08:22:11

網(wǎng)關(guān)過濾器路由

2024-10-29 08:44:18

2021-11-04 10:11:02

Sentinel網(wǎng)關(guān)限流

2020-11-15 23:48:57

服務(wù)網(wǎng)格微服務(wù)網(wǎng)絡(luò)網(wǎng)絡(luò)技術(shù)

2020-04-29 14:33:49

微服務(wù)網(wǎng)關(guān)Kong

2024-07-29 08:24:43

2023-04-03 08:51:06

2019-02-21 09:18:27

服務(wù)路由負載均衡微服務(wù)

2018-04-09 13:56:13

微服務(wù)架構(gòu)分布式
點贊
收藏

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