【springboot知識】配置方式實現SpringCloudGateway相關功能

配置方式實現SpringCloudGateway相關功能

  • Spring Cloud Gateway 核心功能與實戰實現指南
    • 一、核心功能架構
    • 二、六大核心功能實現
      • 1. 動態路由配置
      • 2. 斷言(Predicate)配置
      • 3. 過濾器(Filter)配置
      • 4. 負載均衡配置
      • 5. 熔斷降級配置
      • 6. 限流配置
    • 三、高級配置技巧
      • 1. 跨域配置
      • 2. 重試機制
      • 3. 請求/響應修改
    • 四、監控與調試
      • 1. Actuator端點配置
      • 2. 日志記錄配置
    • 五、安全最佳實踐
      • 1. JWT驗證過濾器
      • 2. 敏感頭過濾
    • 關聯知識

Spring Cloud Gateway 核心功能與實戰實現指南

一、核心功能架構

客戶端請求
路由匹配
過濾器鏈
負載均衡
服務實例

二、六大核心功能實現

1. 動態路由配置

application.yml 配置示例

spring:cloud:gateway:routes:? id: user-serviceuri: lb://user-service  # 服務注冊中心名稱predicates:? Path=/api/users/**filters:? StripPrefix=1  # 去掉/api前綴

代碼增強(Java DSL方式)

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("auth-service", r -> r.path("/auth/**").filters(f -> f.rewritePath("/auth/(?<segment>.*)", "/${segment}")).uri("lb://auth-service")).build();
}

2. 斷言(Predicate)配置

常用斷言類型

routes:? id: time-routeuri: http://example.orgpredicates:? After=2023-01-20T17:42:47.789-07:00[America/Denver]  # 時間斷言? Header=X-Request-Id, \d+  # 請求頭正則匹配? Method=GET,POST  # HTTP方法? Query=name, .+  # 查詢參數

自定義斷言實現

public class CustomPredicate implements RoutePredicateFactory<Config> {@Overridepublic Predicate<ServerWebExchange> apply(Config config) {return exchange -> {// 實現自定義邏輯return exchange.getRequest().getHeaders().containsKey("X-Special");};}
}

3. 過濾器(Filter)配置

內置過濾器示例

filters:? AddRequestHeader=X-Request-color, blue  # 添加請求頭? AddResponseHeader=X-Response-Rate, 1000  # 添加響應頭? Retry=3  # 重試機制? CircuitBreaker=myCircuitBreaker  # 熔斷器

自定義全局過濾器

@Component
public class AuthFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("Authorization");if(!validateToken(token)){exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}return chain.filter(exchange);}@Overridepublic int getOrder() {return -1;  // 執行順序}
}

4. 負載均衡配置

自動集成負載均衡

spring:cloud:loadbalancer:ribbon:enabled: truegateway:routes:? id: product-serviceuri: lb://product-service  # lb://表示啟用負載均衡predicates:? Path=/products/**

5. 熔斷降級配置

Resilience4J熔斷配置

spring:cloud:gateway:routes:? id: inventory-serviceuri: lb://inventory-servicepredicates:? Path=/inventory/**filters:? name: CircuitBreakerargs:name: inventoryCBfallbackUri: forward:/fallback/inventorystatusCodes: 500,503

Fallback控制器

@RestController
public class FallbackController {@GetMapping("/fallback/inventory")public Mono<Map<String, Object>> inventoryFallback() {return Mono.just(Map.of("status", 503,"message", "服務暫時不可用","timestamp", Instant.now()));}
}

6. 限流配置

Redis令牌桶限流

spring:redis:host: localhostcloud:gateway:routes:? id: order-serviceuri: lb://order-servicepredicates:? Path=/orders/**filters:? name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 10  # 每秒10個令牌redis-rate-limiter.burstCapacity: 20  # 桶容量key-resolver: "#{@userKeyResolver}"  # SpEL表達式

Key解析器實現

@Bean
KeyResolver userKeyResolver() {return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("userId"));
}

三、高級配置技巧

1. 跨域配置

spring:cloud:gateway:globalcors:cors-configurations:'[/**]':allowedOrigins: "*"allowedMethods:? GET? POST? PUTallowedHeaders:? Content-Type

2. 重試機制

filters:? name: Retryargs:retries: 3statuses: BAD_GATEWAY,INTERNAL_SERVER_ERRORmethods: GET,POSTbackoff:firstBackoff: 10msmaxBackoff: 100msfactor: 2

3. 請求/響應修改

filters:? RewritePath=/api/v1/(?<segment>.*), /$\{segment}  # 路徑重寫? SetRequestHeader=X-Request-From, Gateway  # 設置請求頭? RemoveResponseHeader=Server  # 移除響應頭

四、監控與調試

1. Actuator端點配置

management:endpoints:web:exposure:include: gatewayendpoint:gateway:enabled: true

訪問端點:

  • /actuator/gateway/routes - 查看所有路由
  • /actuator/gateway/globalfilters - 查看全局過濾器
  • /actuator/gateway/routefilters - 查看路由過濾器

2. 日志記錄配置

logging:level:org.springframework.cloud.gateway: DEBUGreactor.netty.http.client: DEBUG

五、安全最佳實踐

1. JWT驗證過濾器

public class JwtFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("Authorization");if (token != null && JwtUtil.validateToken(token)) {String username = JwtUtil.getUsernameFromToken(token);exchange.getRequest().mutate().header("X-User-Name", username).build();return chain.filter(exchange);}exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}
}

2. 敏感頭過濾

spring:cloud:gateway:default-filters:? RemoveRequestHeader=Cookie,Set-Cookie  # 禁止傳遞Cookie

通過以上配置和代碼示例,您可以快速搭建具備完整功能的API網關。建議根據實際業務需求組合不同的路由策略和過濾器鏈。

關聯知識

【Spring知識】Spring cloud gateway使用詳解

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

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

相關文章

Windows 10 環境二進制方式安裝 MySQL 8.0.41

文章目錄 初始化數據庫配置文件注冊成服務啟停服務鏈接服務器登錄之后重置密碼卸載 初始化數據庫 D:\MySQL\MySQL8.0.41\mysql-8.0.41-winx64\mysql-8.0.41-winx64\bin\mysqld -I --console --basedirD:\MySQL\MySQL8.0.41\mysql-8.0.41-winx64\mysql-8.0.41-winx64 --datadi…

流式通信技術對比:SSE vs WebSocket 應用場景與最佳實踐

在構建動態、實時交互的現代 Web 應用時&#xff0c;實時通信能力至關重要。Server-Sent Events&#xff08;SSE&#xff09; 和 WebSocket 是當前最主流的兩種技術方案&#xff0c;它們都支持服務器主動向客戶端推送數據&#xff0c;但在通信模式、應用場景和實現復雜度上存在…

復雜度和順序表(雙指針方法)

目錄 目錄 目錄 前言&#xff1a; 一、時間復雜度和空間復雜度 1.1概念 1.2規則 二、順序表 2.1靜態順序表 2.2動態順序表 三、雙指針法 四、總結 前言&#xff1a; 時間復雜度和空間復雜度是用于判斷算法好壞的指標&#xff0c;程序性能的核心指標。時間復雜度主要衡…

flutter 專題 六十四 在原生項目中集成Flutter

概述 使用Flutter從零開始開發App是一件輕松愜意的事情&#xff0c;但對于一些成熟的產品來說&#xff0c;完全摒棄原有App的歷史沉淀&#xff0c;全面轉向Flutter是不現實的。因此使用Flutter去統一Android、iOS技術棧&#xff0c;把它作為已有原生App的擴展能力&#xff0c;…

Java高階程序員學習計劃(詳細到天,需有一定Java基礎)

??致敬讀者 ??感謝閱讀??笑口常開??生日快樂?早點睡覺??博主相關 ??博主信息??博客首頁??專欄推薦??活動信息文章目錄 Java高階程序員學習計劃(詳細到天,需有一定Java基礎)第一階段(30天)Java基礎:Java生態工具鏈:設計模式與編碼規范:第二階段(15天…

JS自動化獲取網站信息開發說明

一、自動獲取信息的必要性 1. 提高效率與節省時間 批量處理&#xff1a;自動化可以快速抓取大量數據&#xff0c;比人工手動操作快得多。 24/7 運行&#xff1a;自動化工具可以全天候工作&#xff0c;不受時間限制。 減少重復勞動&#xff1a;避免人工反復執行相同的任務&am…

Android Kotlin 依賴注入全解:Koin appModule 配置與多 ViewModel 數據共享實戰指南

一、基礎配置與概念 1. 什么是 appModule appModule 是 Koin 依賴注入框架中的核心配置模塊&#xff0c;用于集中管理應用中的所有依賴項。它本質上是一個 Koin 模塊&#xff08;org.koin.core.module.Module&#xff09;&#xff0c;通過 DSL 方式聲明各種組件的創建方式和依…

學習記錄:DAY21

我的開發日志&#xff1a;類路徑掃描、DI 容器與動態代理 前言 我失憶了&#xff0c;完全不記得自己早上干了什么。 日程 早上 10 點左右開始&#xff0c;學了一早上&#xff0c;主要是類路徑掃描相關的調試。 晚上 8 點了&#xff0c;真不能再摸&#x1f41f;了。 學習記錄 計…

【Agent】MCP協議 | 用高德MCP Server制作旅游攻略

note MCP (Model Context Protocol) 代表了 AI 與外部工具和數據交互的標準建立。MCP 的本質&#xff1a;它是一個統一的協議標準&#xff0c;使 AI 模型能夠以一致的方式連接各種數據源和工具&#xff0c;類似于 AI 世界的"USB-C"接口。 它能夠在 LLM/AI Agent 與外…

使用 Spring Data Redis 實現 Redis 數據存儲詳解

使用 Spring Data Redis 實現 Redis 數據存儲詳解 Spring Data Redis 是 Spring 生態中操作 Redis 的核心模塊&#xff0c;它封裝了 Redis 客戶端的底層細節&#xff08;如 Jedis 或 Lettuce&#xff09;&#xff0c;提供了統一的 API 來操作 Redis 的數據結構。以下是詳細實現…

Qt5與現代OpenGL學習(四)X軸方向旋轉60度

把上面兩張圖像放到D盤1文件夾內&#xff1a; shader.h #ifndef SHADER_H #define SHADER_H#include <QDebug> #include <QOpenGLShader> #include <QOpenGLShaderProgram> #include <QString>class Shader { public:Shader(const QString& verte…

【Machine Learning Q and AI 讀書筆記】- 02 自監督學習

Machine Learning Q and AI 中文譯名 大模型技術30講&#xff0c;主要總結了大模型相關的技術要點&#xff0c;結合學術和工程化&#xff0c;對LLM從業者來說&#xff0c;是一份非常好的學習實踐技術地圖. 本文是Machine Learning Q and AI 讀書筆記的第2篇&#xff0c;對應原…

using var connection = connectionFactory.CreateConnection(); using var 是什么意思

在 .NET 中&#xff0c;??垃圾回收&#xff08;Garbage Collection, GC&#xff09;?? 確實是自動管理內存的機制&#xff0c;但它 ??僅適用于托管資源&#xff08;Managed Resources&#xff09;??&#xff08;如類實例、數組等&#xff09;。然而&#xff0c;對于 ?…

Multicore-TSNE

文章目錄 TSNE使用scikit-learn庫使用Multicore-TSNE庫安裝方法基本使用方法采用不同的距離度量 其他資料 TSNE t-Distributed Stochastic Neighbor Embedding (t-SNE) 是一種高維數據的降維方法&#xff0c;由Laurens van der Maaten和Geoffrey Hinton于2008年提出&#xff0…

SI5338-EVB Usage Guide(LVPECL、LVDS、HCSL、CMOS、SSTL、HSTL)

目錄 1. 簡介 1.1 EVB 介紹 1.2 Si5338 Block Diagram 2. EVB 詳解 2.1 實物圖 2.2 基本配置 2.2.1 Universal Pin 2.2.2 IIC I/F 2.2.3 Input Clocks 2.2.4 Output Frequencies 2.2.5 Output Driver 2.2.6 Freq and Phase Offset 2.2.7 Spread Spectrum 2.2.8 快…

Spring AI應用系列——基于OpenTelemetry實現大模型調用的可觀測性實踐

一、項目背景與目標 在AI應用日益復雜的今天&#xff0c;大模型服務&#xff08;如語言理解和生成&#xff09;的性能監控和問題排查變得尤為關鍵。為了實現對大模型調用鏈路的可觀測性&#xff08;Observability&#xff09;管理&#xff0c;我們基于 Spring Boot Spring AI…

Spyglass:官方Hands-on Training(一)

相關閱讀 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 本文是對Spyglass Hands-on Training中第一個實驗的翻譯&#xff08;有刪改&#xff09;&#xff0c;Lab文件可以從以下鏈接獲取。Spyglass Hands-on Traininghttps:…

PCB設計工藝規范(三)走線要求

走線要求 1.走線要求2.固定孔、安裝孔、過孔要求3.基準點要求4.絲印要求 1.走線要求 印制板距板邊距離:V-CUT 邊大于 0.75mm&#xff0c;銑槽邊大于0.3mm。為了保證 PCB 加工時不出現露銅的缺陷&#xff0c;要求所有的走線及銅箔距離板邊:V-CUT邊大于 0.75mm&#xff0c;銑槽邊…

抓取工具Charles配置教程(mac電腦+ios手機)

mac電腦上的配置 1. 下載最新版本的Charles 2. 按照以下截圖進行配置 2.1 端口號配置&#xff1a; 2.2 https配置 3. mac端證書配置 4. IOS手機端網絡配置 4.1 先查看電腦上的配置 4.2 配置手機網絡 連接和電腦同一個wifi&#xff0c;然后按照以下截圖進行配置 5. 手機端證書…

【CSS】精通Flex布局(全)

目錄 1. flex布局體驗 1.1 傳統布局 與 flex布局 1.2 初體驗 2. flex布局原理 2.1 布局原理 3. flex布局父項常見屬性 3.1 常見父項屬性 3.2 屬性值 3.3 justify-content 設置主軸上的子元素排列方式 3.4 flex-wrap設置子元素是否換行 3.5 align-items 設置側軸上的…