【Spring開發(fā)】SpringCloud服務端基礎(chǔ)框架第9篇:3.Gateway服務網(wǎng)關(guān)【附代碼文檔】

??????教程全知識點簡介:Docker實用篇 0.學習目標 1.初識Docker 1.2.Docker和虛擬機的區(qū)別 2.Docker的基本操作 2.1.鏡像操作 2.1.3.案例1-拉取、查看鏡像 2.1.5.練習 3.Dockerfile自定義鏡像 3.3.構(gòu)建Java項目 3.4.小結(jié) 4.Docker-Compose 4.3.部署微服務集群 4.3.1.compose文件 4.3.3.打包 設(shè)置docker鏡像源 關(guān)閉 禁止開機啟動防火墻 安裝 修改權(quán)限 補全命令 RabbitMQ 1.初識MQ 1.1.同步和異步通訊 1.2.技術(shù)對比: 2.快速入門 2.2.RabbitMQ消息模型 2.3.導入Demo工程 2.4.入門案例 2.4.1.publisher實現(xiàn) 3.1.3.測試 3.2.WorkQueue 3.2.1.消息發(fā)送 3.2.4.能者多勞 3.3.發(fā)布/訂閱 3.4.Fanout 3.4.1.聲明隊列和交換機 3.5.Direct 3.6.Topic 3.6.1.說明 SpringCloud01 1.認識微服務 1.1.單體架構(gòu) 2.服務拆分和遠程調(diào)用 2.1.服務拆分原則 2.3.實現(xiàn)遠程調(diào)用案例 2.3.1.案例需求: 2.3.2.注冊RestTemplate 3)啟動多個user-service實 4.Ribbon負載均衡 4.1.負載均衡原理 4.2.源碼跟蹤 1)LoadBalancerIntercepor 3)負載均衡策略IRule 5.Nacos注冊中心 5.1.認識和安裝Nacos 5.2.服務注冊到nacos 1)引入依賴 2)配置nacos地址 3)重啟 5.3.服務分級存儲模型 5.3.2.同集群優(yōu)先的負載均衡 5.4.權(quán)重配置 Nacos安裝指南 1.Windows安裝 1.1.下載安裝包 1.2.解壓 1.3.端口配置 1.4.啟動 1.5.訪問 2.Linux安裝 2.1.安裝JDK 3.Gateway服務網(wǎng)關(guān) 3.1.為什么需要網(wǎng)關(guān) 3.3.斷言工廠


????倉庫code.zip ??直接-->:???https://gitlab.com/yiqing112/backend/-/blob/main/Spring/SpringCloud服務端基礎(chǔ)框架/note.md ???????

? 本教程項目亮點

?? 知識體系完整:覆蓋從基礎(chǔ)原理、核心方法到高階應用的全流程內(nèi)容
?? 全技術(shù)鏈覆蓋:完整前后端技術(shù)棧,涵蓋開發(fā)必備技能
?? 從零到實戰(zhàn):適合 0 基礎(chǔ)入門到提升,循序漸進掌握核心能力
?? 豐富文檔與代碼示例:涵蓋多種場景,可運行、可復用
?? 工作與學習雙參考:不僅適合系統(tǒng)化學習,更可作為日常開發(fā)中的查閱手冊
?? 模塊化知識結(jié)構(gòu):按知識點分章節(jié),便于快速定位和復習
?? 長期可用的技術(shù)積累:不止一次學習,而是能伴隨工作與項目長期參考


??????全教程總章節(jié)


??????本篇主要內(nèi)容

3.Gateway服務網(wǎng)關(guān)

Spring Cloud Gateway 是 Spring Cloud 的一個全新項目,該項目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等響應式編程和事件流技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務架構(gòu)提供一種簡單有效的統(tǒng)一的 API 路由管理方式。

3.1.為什么需要網(wǎng)關(guān)

Gateway網(wǎng)關(guān)是 服務的守門神,所有微服務的統(tǒng)一入口。

網(wǎng)關(guān)的核心功能特性

  • 請求路由
  • 權(quán)限控制
  • 限流

架構(gòu)圖:

權(quán)限控制:網(wǎng)關(guān)作為微服務入口,需要校驗用戶是是否有請求資格,如果沒有則進行攔截。

FreeMarker 文檔

路由和負載均衡:一切請求都必須先經(jīng)過gateway,但網(wǎng)關(guān)不處理業(yè)務,而是根據(jù)某種規(guī)則,把請求轉(zhuǎn)發(fā)到某個微服務,這個過程叫做路由。當然路由的目標服務有多個時,還需要做負載均衡。

限流:當請求流量過高時,在網(wǎng)關(guān)中按照下流的微服務能夠接受的速度來放行請求,避免服務壓力過大。

在SpringCloud中網(wǎng)關(guān)的實現(xiàn)包括兩種:

  • gateway
  • zuul

Zuul是基于Servlet的實現(xiàn),屬于阻塞式編程。而SpringCloudGateway則是基于Spring5中提供的WebFlux,屬于響應式編程的實現(xiàn),具備更好的性能。

3.2.gateway快速入門

下面, 就演示下網(wǎng)關(guān)的基本路由功能?;静襟E如下:

  1. 創(chuàng)建SpringBoot工程gateway,引入網(wǎng)關(guān)依賴
  2. 編寫啟動類
  3. 編寫基礎(chǔ)配置和路由規(guī)則
  4. 啟動網(wǎng)關(guān)服務進行測試

SBT 文檔

1)創(chuàng)建gateway服務,引入依賴

創(chuàng)建服務:

引入依賴:

<!--網(wǎng)關(guān)-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服務發(fā)現(xiàn)依賴-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2)編寫啟動類

package cn.itcast.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GatewayApplication {

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

WildFly 文檔

3)編寫基礎(chǔ)配置和路由規(guī)則

創(chuàng)建application.yml文件,內(nèi)容如下:

server:
  port: 10010 # 網(wǎng)關(guān)端口
spring:
  application:
    name: gateway # 服務名稱
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes: # 網(wǎng)關(guān)路由配置
        - id: user-service # 路由id,自定義,只要唯一即可
          # uri: http://127.0.0.1:8081 # 路由的目標地址 http就是固定地址
          uri: lb://userservice # 路由的目標地址 lb就是負載均衡,后面跟服務名稱
          predicates: # 路由斷言,也就是判斷請求是否符合路由規(guī)則的條件
            - Path=/user/** # 這個是按照路徑匹配,只要以/user/開頭就符合要求

將符合Path 規(guī)則的一切請求,都到 uri參數(shù)指定的地址。

本例中, 將 /user/**開頭的請求,到lb://userservice,lb是負載均衡,根據(jù)服務名拉取服務列表,實現(xiàn)負載均衡。

4)重啟測試

重啟網(wǎng)關(guān),訪問http://localhost:10010/user/1時,符合/user/**規(guī)則,請求轉(zhuǎn)發(fā)到uri:http://userservice/user/1,得到了結(jié)果:

5)網(wǎng)關(guān)路由的流程圖

整個訪問的流程如下:

總結(jié):

網(wǎng)關(guān)搭建步驟:

  1. 創(chuàng)建項目,引入nacos服務發(fā)現(xiàn)和gateway依賴

  2. 配置application.yml,包括服務基本信息、nacos地址、路由

路由配置包括:

  1. 路由id:路由的唯一標示

  2. 路由目標(uri):路由的目標地址,http代表固定地址,lb代表根據(jù)服務名負載均衡

  3. 路由斷言(predicates):判斷路由的規(guī)則,

  4. 路由過濾器(filters):對請求或響應做處理

接下來,就重點來學習路由斷言和路由過濾器的詳細知識

3.3.斷言工廠

在配置文件中寫的斷言規(guī)則只是字符串,這些字符串會被Predicate Factory讀取并處理,轉(zhuǎn)變?yōu)槁酚膳袛嗟臈l件

例如Path=/user/**是按照路徑匹配,這個規(guī)則是由

org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory類來

處理的,像這樣的斷言工廠在SpringCloudGateway還有十幾個:

名稱 說明 示例

??? (未完待續(xù))項目系列下一章

??下一篇 將進入更精彩的環(huán)節(jié)!
?? 記得收藏 & 關(guān)注,第一時間獲取更新!
?? 一起見證整個系列逐步成型的全過程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容