org.springframework.cloud.gateway 組件解釋

org.springframework.cloud.gateway?是 Spring Cloud 生態系統中的一個新一代的、功能強大的 API 網關


1. 什么是 API 網關 (API Gateway)?

在講解 Spring Cloud Gateway 之前,我們先要理解它扮演的角色——API 網關。

在一個微服務架構中,系統被拆分成多個獨立的服務(如用戶服務、商品服務、訂單服務等)。客戶端(如網頁、手機 App)如果直接和這些服務通信,會面臨很多問題:

  • 地址管理復雜:客戶端需要知道所有服務的網絡地址。

  • 認證授權繁瑣:每個服務都需要獨立做用戶認證。

  • 跨域問題:瀏覽器訪問不同域的服務會產生跨域問題。

  • 協議轉換困難:如果有的服務用 HTTP,有的用 WebSocket,客戶端處理起來很麻煩。

API 網關就是為了解決這些問題而誕生的。它像一個“大門”或“前臺接待”,統一接收所有外部請求,然后根據一定的規則,將請求轉發到內部對應的微服務上。

網關的核心職責包括:

  • 路由 (Routing):將請求轉發到正確的微服務。

  • 認證與安全 (Authentication & Security):統一處理身份驗證、權限控制。

  • 負載均衡 (Load Balancing):將請求分發到服務的多個實例上。

  • 限流熔斷 (Rate Limiting & Circuit Breaking):防止流量過大沖垮后端服務。

  • 日志監控 (Logging & Monitoring):記錄請求日志,監控系統健康狀況。

  • 協議轉換:如 HTTP 到 gRPC 的轉換。


2. Spring Cloud Gateway 詳解

org.springframework.cloud.gateway?就是 Spring 官方推出的用于構建 API 網關的框架。它是對之前 Netflix Zuul 1.x 的替代和升級。

核心特性
  1. 基于響應式編程模型:它構建于 Spring Framework 5, Project Reactor 和 Spring Boot 2之上,底層網絡通信使用的是?Netty。這使得它是一個完全異步、非阻塞的網關。相比于 Zuul 1.x 的阻塞式 I/O 模型,Gateway 在高并發場景下性能更好,資源消耗更低。

  2. 動態路由:可以與服務發現組件(如 Eureka, Consul, Nacos)無縫集成,動態地從注冊中心獲取服務地址并創建路由,無需重啟網關。

  3. 強大的斷言(Predicate)和過濾器(Filter):這是 Gateway 的核心。你可以通過非常靈活的方式來定義路由規則和請求處理邏輯。

  4. 易于配置:支持通過配置文件(如?application.yml)或 Java Bean 的方式進行配置。

  5. 高集成度:與 Spring Cloud 生態的其他組件(如 Spring Security, Resilience4j)可以很好地集成,輕松實現安全、熔斷等功能。

  6. 支持 Websockets


3. 三大核心概念

Spring Cloud Gateway 的工作原理基于三個核心概念:路由 (Route)斷言 (Predicate)?和?過濾器 (Filter)

a. 路由 (Route)

路由是網關最基本的組成單元。它由以下幾個部分構成:

  • ID: 路由的唯一標識。

  • 目標 URI: 請求最終被轉發到的目標地址。

  • 一組斷言 (Predicates): 決定一個請求是否匹配該路由的條件。

  • 一組過濾器 (Filters): 在請求被轉發前后對其進行修改或處理。

b. 斷言 (Predicate)

斷言就是一個布爾值判斷,輸入是?ServerWebExchange(包含了 HTTP 請求的所有信息),輸出是?true?或?false。如果一個請求滿足了某個路由的所有斷言條件,那么這個請求就會被該路由處理。

Spring Cloud Gateway 內置了多種斷言工廠,可以讓你根據請求的各種屬性來匹配路由:

  • Path: 根據請求的 URL 路徑進行匹配。例如?Path=/users/**。

  • Method: 根據請求的方法進行匹配。例如?Method=GET。

  • Header: 根據請求頭進行匹配。例如?Header=X-Request-Id, \d+。

  • Query: 根據請求參數進行匹配。例如?Query=name, john。

  • Host: 根據主機名進行匹配。例如?Host=**.somehost.org。

  • Cookie: 根據 Cookie 進行匹配。

  • After/Before/Between: 根據時間進行匹配。

多個斷言可以組合使用,它們之間是“與”(AND)的關系。

c. 過濾器 (Filter)

過濾器用于在請求被路由之前或之后,對請求和響應進行修改。過濾器分為兩種類型:

  • GatewayFilter: 作用于單個路由。

  • GlobalFilter: 全局過濾器,作用于所有路由。

過濾器的生命周期分為 "pre" 和 "post" 兩個階段:

  • Pre-filtering: 在請求被轉發到下游服務之前執行。可以用來添加請求頭、記錄日志、進行權限驗證等。

  • Post-filtering: 在下游服務返回響應之后執行。可以用來修改響應體、添加響應頭等。

常見的內置過濾器有:

  • AddRequestHeader,?AddResponseHeader: 添加請求/響應頭。

  • RewritePath: 重寫請求路徑。

  • Retry: 失敗重試。

  • RateLimiter: 請求限流。

  • CircuitBreaker: 熔斷器。


4. 工作流程

一個請求進入 Spring Cloud Gateway 的完整流程如下:

  1. 客戶端向 Gateway 發送請求。

  2. Gateway 的?Handler Mapping?模塊接收請求,并根據一系列的斷言 (Predicates)?來尋找匹配的路由 (Route)

  3. 一旦找到匹配的路由,請求就會被發送給 Gateway 的?Web Handler

  4. Web Handler 會將請求通過一個過濾器鏈 (Filter Chain)

  5. 在 "pre" 階段,請求會依次經過所有全局過濾器 (GlobalFilters)?和該路由配置的網關過濾器 (GatewayFilters)

  6. 過濾器鏈執行完畢后,Gateway 發出代理請求,通過負載均衡(如?lb://?協議)將請求轉發到真正的后端微服務

  7. 微服務處理請求并返回響應。

  8. 響應會再次經過過濾器鏈的 "post" 階段,倒序執行所有過濾器。

  9. 最終,Gateway 將處理后的響應返回給客戶端


5. 配置示例

下面是一個典型的?application.yml?配置,它展示了如何定義路由:

spring:cloud:gateway:# 開啟與服務發現組件的集成discovery:locator:enabled: truelower-case-service-id: true # 將服務名轉為小寫# 定義路由規則routes:# 路由1:訪問 /user/** 的請求會被轉發到 user-service- id: user_service_route # 路由的唯一IDuri: lb://user-service # 目標URI,lb:// 表示從服務發現中獲取地址predicates: # 斷言條件- Path=/user/**filters: # 過濾器# 重寫路徑,例如 /user/1 -> /1- RewritePath=/user/(?<segment>.*), /$\{segment} # 路由2:訪問 /product/** 的請求會被轉發到 product-service- id: product_service_routeuri: lb://product-servicepredicates:- Path=/product/**

content_copydownload

Use code?with caution.Yaml

解釋:

  • id: 路由的唯一標識,方便管理。

  • uri: lb://user-service:?lb?是?load-balancer?的縮寫,表示 Gateway 會從服務注冊中心(如 Nacos、Eureka)查找名為?user-service?的服務,并對其進行負載均衡。

  • predicates: - Path=/user/**: 當請求的路徑匹配?/user/?開頭的模式時,該路由生效。

  • filters: - RewritePath...: 這是一個過濾器,它會重寫請求路徑。例如,當客戶端請求?http://gateway-host/user/profile/1?時,Gateway 會將請求路徑修改為?/profile/1,然后再轉發給?user-service。


6. 總結:為什么要用 Spring Cloud Gateway?

  • 性能優越:基于非阻塞模型,適合處理高并發 I/O 密集型任務。

  • 功能強大:提供了豐富的路由、斷言和過濾器,能滿足絕大多數網關場景的需求。

  • 與 Spring Cloud 生態無縫集成:是目前構建 Spring Cloud 微服務架構的首選網關。

  • 易于開發和擴展:可以輕松編寫自定義的過濾器和斷言,實現復雜的業務邏輯。

總而言之,org.springframework.cloud.gateway?是一個現代、高效、功能完備的 API 網關解決方案,是 Spring Cloud 微服務技術棧中不可或缺的一環。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85350.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85350.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux ollama 下載安裝

linux ollama 下載安裝 ollama 下載地址ollama 手動安裝解決找不到命令的問題升級[gcc](https://so.csdn.net/so/search?qgcc&spm1001.2101.3001.7020)Centos7 停止維護之后 [升級gcc||找不到devtoolset-8-gcc* 問題解決方案](https://www.cnblogs.com/Jedi-Pz/p/18447117…

2025 滲透工具:【中國蟻劍】連接一句話MUA文件 遠控虛擬機靶機

溫馨提示&#xff1a; 本程序僅作為虛擬機測試環境使用&#xff0c;請勿用于任何不當用途。使用即表示您同意自行承擔可能產生的所有責任。 一、場景復現 1、PhpMystudy軟件啟動網頁模擬靶機 小皮面板(phpstudy) - 讓天下沒有難配的服務器環境&#xff01; 2、開啟apache 3、…

Datawhale 網絡爬蟲技術入門第2次筆記

正則表達式 正則表達式&#xff08;Regular Expression&#xff09;&#xff0c;?種使?表達式的?式對字符串進?匹配的語法規則。 正則的語法&#xff1a;使?元字符進?排列組合來匹配字符串。 在線測試正則表達式&#xff1a;在線正則表達式測試OSCHINA.NET在線工具,os…

詳解Redis的集群模式(主從復制、哨兵與Cluster)

一、主從復制 (Master-Slave Replication) 1. 基本概念 主從復制是Redis最簡單的集群模式&#xff0c;由一個主節點(Master)和一個或多個從節點(Slave)組成。 2. 工作原理 數據同步&#xff1a;從節點啟動時會向主節點發送SYNC命令&#xff0c;主節點執行BGSAVE生成RDB文件并…

如何使用 Airtest 對 Flutter 和 Unity 應用進行UI自動化測試

使用 Airtest 進行 Flutter/Unity UI 自動化測試終極指南 一、 核心原理&#xff1a;為什么 Airtest 能行&#xff1f; 要理解如何用&#xff0c;先要明白其原理。Airtest 采取了“兩條腿走路”的策略&#xff0c;這正是它能通吃各種UI技術的關鍵。 第一條腿&#xff1a;基于…

河馬劇場多部自制劇霸榜,短劇精品化戰略持續推進

臨近暑期&#xff0c;短劇市場熱度逐漸攀升。近期&#xff0c;DataEye發布6月9日—6月15日微短劇熱力榜顯示河馬劇場以8部作品占據TOP30近三分之一席位&#xff0c;前三名中更是占據2個席位&#xff0c;以題材多元化、用戶覆蓋廣、數據爆發力強的特點引領行業風向。其中&#x…

冪級數 (0,R); R ;(R,+oo)

很好&#xff0c;我們現在來回答你問的這個問題&#xff1a; &#x1f7e0; 冪級數在收斂半徑 R R R 以外會發生什么&#xff1f; 我們考慮一個一般形式的冪級數&#xff1a; ∑ n 0 ∞ a n ( x ? x 0 ) n \sum_{n0}^{\infty} a_n (x - x_0)^n n0∑∞?an?(x?x0?)n 它的…

C#學習13——正則表達式

一、正則表達式 是一種匹配輸入文本的模式&#xff0c;是由特殊字符組成&#xff0c;用于匹配字符串中的字符組合。 二、正則表達式有哪些&#xff1f; 1.Regex 類&#xff08;引入System.Text.RegularExpressions;&#xff09; Regex 類用于表示一個正則表達式。 1&#…

【Redis】持久化機制:RDB / AOF 的應用與場景

文章目錄 Redis 持久化一、RDB1.1 說明1.2 觸發機制手動觸發自動觸發 1.3 流程說明1.4 文件處理1.5 優缺點 & 適用場景 二、AOF2.1 說明2.2 使用 AOF2.3 命令寫入2.4 文件同步2.5 重寫機制2.6 啟動時數據恢復2.7 優缺點 & 適用場景 三、不使用 AOF / RDB 的情況3.1 場景…

Python 企業級開發與DevOps實踐

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 大型項目結構與設計模式 項目結構規范 text 復制 下載 enterprise_app/ ├── docs/ # 項目文檔 ├── tests/ # 測試代碼 │ ├── unit/ …

E結構體基礎.go

前言&#xff1a;結構體是一種用戶自定義的數據類型&#xff0c;它可以將多個不同類型的數據整合在一起&#xff0c;形成一個有機的整體。這就好比在現實生活中&#xff0c;我們有各種各樣的物品&#xff0c;它們各自有不同的屬性和用途&#xff0c;而結構體就像是一個收納箱&a…

Spring @Autowired 依賴注入全解析

Autowired 是 Spring 框架中實現依賴注入的核心注解&#xff0c;其自動裝配過程可分為以下步驟&#xff0c;結合了類型匹配、名稱解析和容器協作機制&#xff1a; 1. 組件掃描與 Bean 定義注冊 掃描階段&#xff1a;Spring 容器啟動時&#xff0c;通過 ComponentScan 或 XML 配…

將git的普通目錄用idea初始化為maven項目

在 IntelliJ IDEA 中將一個已存在的 Git 目錄初始化為 Maven 項目&#xff0c;可以通過以下步驟完成。這些步驟假設你已經有一個包含代碼的 Git 倉庫&#xff0c;并希望將其轉換為 Maven 項目結構&#xff0c;以便更好地管理依賴和構建。 步驟 1&#xff1a;打開或導入 Git 倉庫…

Vue 中 key 屬性的深入解析:改變 key 導致組件銷毀與重建

一、key 屬性的核心作用 在 Vue 中,key是一個特殊的屬性,主要用于協助 Vue 的虛擬 DOM(Virtual DOM)算法高效地更新實際 DOM。它的核心作用可以概括為: 唯一標識節點:為每個節點提供一個唯一的身份標識優化 Diff 算法:幫助 Vue 準確判斷兩個節點是否為同一節點(如for循…

【音視頻】PJSIP庫——示例簡介、C++類說明

1、簡介 pjsip庫的源碼中有很多示例,是入門pjsip的第一手資料,下面將各個示例所演示的功能列舉出來,以便下一步學習; 最后總結下C++接口主要類及成員函數說明。 2、示例介紹 2.1 音視頻處理 aectest 音頻回聲消除測試工具,用于演示音頻處理模塊中的回聲消除(AEC)功能…

網站用CDN可以防DDoS和CC攻擊嗎?

現在市面上常見有兩種CDN&#xff0c;加速CDN與高防CDN&#xff0c;這兩種的區別還是很大的。 加速CDN&#xff1a; 加速CDN基本上都是共享、無防節點&#xff0c;主要做的是加速&#xff0c;所以價格也會相對較低&#xff0c;大陸地區的CDN都需要備案域名接入使用。 高防CD…

【圖片識別改名】批量識別圖片中的文字對圖片進行改名,識別文字對圖片重新命名的操作步驟和注意事項

一、應用場景 快遞單號識別與管理&#xff1a;在快遞業務中&#xff0c;每天會產生大量的快遞面單圖片。通過咕嘎OCR批量識別面單上的快遞單號等關鍵信息&#xff0c;并以此對圖片進行重命名&#xff0c;方便工作人員快速查詢和管理快遞包裹的物流信息&#xff0c;提高快遞處理…

先理解軟件工程,再談AI輔助研發

摘要&#xff1a; 近期行業內對“AI賦能軟件工程”的討論&#xff0c;大多聚焦于代碼生成等局部提效&#xff0c;這是一種危險的短視。本文旨在糾正將“軟件開發”等同于“編碼”的普遍誤解&#xff0c;深入探討軟件工程的系統性本質。我們將論證&#xff0c;若缺乏堅實的工程體…

Android軟件適配遙控器需求-案例經驗分享

不分大屏產品需要有遙控器功能&#xff0c;這里分享部分實戰經驗 文章目錄 前言一、案例部分效果圖二、項目基礎架構三、焦點基礎知識適配遙控器基礎-焦點問題焦點管理明確焦點狀態布局實現硬編碼實現引入第三方自定義組件實現 焦點順序作用 初始焦點 requestFocus 按鍵處理獲取…

《HTTP權威指南》 第3章 HTTP報文

報文是如何流動的 HTTP報文是在HTTP程序之間發送的數據塊。數據塊以一些文本形式的元信息開頭。 報文方向有&#xff1a;流入、流出、上游、下游。 流入和流出描述事務處理的方向&#xff0c;流入和流出是基于服務器的描述。 流入&#xff1a;客戶端發往服務器的請求報文 流…