微服務--Gateway網關

1. Gateway簡介

????????Gateway網關是微服務架構中不可或缺的組件,是微服務架構中的統一入口,它作為所有客戶端請求的第一道防線,負責請求的路由、過濾和聚合。

Gateway核心功能

路由(Routing)

  • 根據請求路徑、Header、參數等將請求路由到不同微服務

過濾(Filtering)

  • 前置過濾器:認證、鑒權、請求改寫

  • 后置過濾器:響應改寫、添加Header

負載均衡

  • 熔斷降級

  • 集成Hystrix或Resilience4j實現熔斷機制

限流

  • 基于Redis等實現分布式限流

2. 搭建網關服務

2.1 創建網關模塊,導依賴

  • 創建模塊

  • 啟動類


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);}
}
  • pom導入依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud-demo</artifactId><groupId>com.itgaohe</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>gateway-service</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><!--網關--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--nacos服務發現依賴--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--openfeign依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--負載均衡依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies></project>
  • ?yml配置文件

server:port: 10010 # 網關端口
spring:application:name: gatewayservice # 服務名稱cloud:nacos:server-addr: localhost:8848 # nacos地址discovery:username: nacospassword: nacosgateway:# 。。。globalcors: # 全局的跨域處理add-to-simple-url-handler-mapping: true # 解決options請求被攔截問題corsConfigurations:'[/**]':allowedOrigins: # 允許哪些網站的跨域請求- "http://127.0.0.1:8849"allowedMethods: # 允許的跨域ajax的請求方式- "GET"- "POST"- "DELETE"- "PUT"- "OPTIONS"allowedHeaders: "*" # 允許在請求中攜帶的頭信息allowCredentials: true # 是否允許攜帶cookiemaxAge: 360000 # 這次跨域檢測的有效期routes: # 網關路由配置- id: user-service # 路由id,自定義,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目標地址 http就是固定地址uri: lb://userservice # 路由的目標地址 lb就是負載均衡,后面跟服務名稱predicates: # 路由斷言,也就是判斷請求是否符合路由規則的條件- Path=/user/** # 這個是按照路徑匹配,只要以/user/開頭就符合要求- id: order-service # 路由id,自定義,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目標地址 http就是固定地址uri: lb://orderservice # 路由的目標地址 lb就是負載均衡,后面跟服務名稱predicates: # 路由斷言,也就是判斷請求是否符合路由規則的條件- Path=/order/** # 這個是按照路徑匹配,只要以/user/開頭就符合要求filters: #路由過濾器- AddRequestHeader=tou,itgaohe # 添加請求頭 : 格式 k,vdefault-filters: # 默認過濾項- AddRequestHeader=tou2,itgaohe22 # 添加請求頭

    ? ? ? ? Gateway網關搭建好之后,需要在服務生產者(order-service)設置攔截器,在網關服務的配置文件中配置全局攔截器,攜帶請求頭,通過網關進行請求的話攜帶請求頭,攔截器放行,如果請求不是從網關過來的,則不會攜帶強求頭,攔截器會進行請求攔截

    2.2 攔截器

    • 定義網關攔截器

    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;/*** 網關攔截器,用于校驗請求是否通過網關訪問。*/
    @Component
    public class GateInterceptor implements HandlerInterceptor {/*** 在處理請求之前進行攔截操作。* * @param request  HTTP請求對象* @param response HTTP響應對象* @param handler  請求處理器* @return 如果校驗通過返回true,否則返回false* @throws Exception 異常信息*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 設置響應內容類型和字符編碼response.setContentType("html/text;charset=utf8");// 從請求頭中獲取"tou"字段的值String tou = request.getHeader("tou");// 校驗"tou"字段是否為"itgaohe"if ("itgaohe".equals(tou)) {// 校驗通過,繼續后續處理return true;} else {// 校驗未通過,設置錯誤狀態碼并返回提示信息response.setStatus(502);response.getWriter().write("沒有通過網關訪問");return false;}}
    }
    
    • 在核心配置中進行攔截器配置

    import com.itgaohe.order.interceptor.GateInterceptor;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
    public class WebConfig implements WebMvcConfigurer {@Autowiredprivate GateInterceptor gateInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(gateInterceptor).addPathPatterns("/**");}
    }
    

    3.跨域問題

    跨域問題的核心表現

    當以下任意一項不同時,就會觸發跨域限制:

    • 協議不同(http vs https)

    • 域名不同(a.com vs b.com)

    • 端口不同(8080 vs 8081)

    ? ? ? ? Gateway解決跨域問題采用的是CORS方案,只需要在yml配置文件中進行配置就行

    # 。。。globalcors: # 全局的跨域處理add-to-simple-url-handler-mapping: true # 解決options請求被攔截問題corsConfigurations:'[/**]':allowedOrigins: # 允許哪些網站的跨域請求- "http://127.0.0.1:8849"allowedMethods: # 允許的跨域ajax的請求方式- "GET"- "POST"- "DELETE"- "PUT"- "OPTIONS"allowedHeaders: "*" # 允許在請求中攜帶的頭信息allowCredentials: true # 是否允許攜帶cookiemaxAge: 360000 # 這次跨域檢測的有效期

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

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

    相關文章

    區塊鏈與人工智能的融合:從信任到智能的IT新引擎

    在信息技術&#xff08;IT&#xff09;的飛速發展中&#xff0c;兩大顛覆性技術的交匯正掀起一場革命——區塊鏈與人工智能&#xff08;AI&#xff09;的融合。2025年&#xff0c;隨著數據隱私需求的激增、去中心化應用的爆發以及企業對可信智能系統的追求&#xff0c;區塊鏈與…

    Javascript什么是原型和原型鏈,八股文

    原型:函數都有prototype屬性,稱之為原型&#xff0c;也稱為原型對象 原型可以放一些屬性和方法&#xff0c;共享給實例對象使用 原型可以做繼承 原型鏈:對象都有__proto__屬性,這個屬性指向它的原型對象,原型對象也是對象,也有__proto__屬性,指向原型對象的原型對象,這樣一層一…

    生日悖論理論及在哈希函數碰撞中的應用

    目錄 一、生日悖論&#xff08;Birthday Paradox&#xff09;介紹 二、生日悖論的數學解釋 &#xff08;一&#xff09;計算所有人生日都不同的概率 數學推導 示例計算 &#xff08;二&#xff09;至少有兩個人生日相同的概率 三、哈希函數碰撞與生日悖論的關系思考 &a…

    探索數據的力量:Elasticsearch中指定鏈表字段的統計查詢記錄

    目錄 一、基本的數據結構說明 二、基本的統計記錄 &#xff08;一&#xff09;統計當前索引中sellingProducts的所有類型 &#xff08;二&#xff09;檢索指定文檔中sellingProducts的數據總量 &#xff08;三&#xff09;檢索指定文檔中sellingProducts指定類型的數量統計…

    細節致勝:如何重塑反向海淘用戶體驗

    在反向海淘的激烈競爭中&#xff0c;客戶體驗已成為決定勝負的關鍵。一次流暢的購物旅程、一個貼心的服務細節&#xff0c;都可能讓海外消費者成為品牌的忠實傳播者。易境通代購商城系統正是以極致體驗為核心&#xff0c;通過精細化服務管理&#xff0c;助力企業贏得用戶口碑與…

    Docker 分階段構建

    Docker 分階段構建 Docker 分階段構建&#xff08;Multi-stage Build&#xff09;是一種高效的鏡像構建技術&#xff0c;允許在一個 Dockerfile 中使用多個構建階段&#xff0c;每個階段可以使用不同的基礎鏡像&#xff0c;最終只保留需要的文件&#xff0c;從而顯著減小鏡像體…

    人工智能學習23-BP-圖像編碼

    人工智能學習概述—快手視頻 人工智能學習23-BP-圖像編碼—快手視頻

    k8s的開篇學習和安裝

    k8s的開篇學習 學習網站 參考資料 1。 K8S能干什么 [概述 | Kubernetes](https://kubernetes.io/zh-cn/docs/concepts/overview/#why-you-need-kubernetes-and-what-can-it-do)需要開代理 2。docker資料 https://docs.docker.com/get-started/3.prometheus資料 https://promet…

    CS144 lab0: warmup

    Lab 0: networking warmup 1. 環境 依賴配置 sudo apt update && sudo apt install git cmake gdb build-essential clang \clang-tidy clang-format gcc-doc pkg-config glibc-doc tcpdump tsharkg13配置 ppa中科大源 # deb https://ppa.launchpadcontent.net/ubu…

    StarRocks

    StarRocks 是一個高性能的 分布式 MPP(Massively Parallel Processing)數據庫,主要用于 實時數據分析(Real-Time Analytics),是新一代的 OLAP 數據庫,對標 ClickHouse、Apache Doris 等。 ?? 一、StarRocks 是什么? StarRocks 是一個面向實時分析場景、支持高并發、高…

    8088單板機8259中斷的軟件觸發測試

    1.工作原理 8086和8088的中斷設計的是很巧妙的&#xff0c;比如給8259的IR1配置了一個中斷&#xff0c;中斷號為21H&#xff0c;那么當真個引腳出現高電平的時候&#xff0c;就會觸發相應上的中斷響應。但&#xff0c;這不是唯一能夠觸發21H中斷的方法&#xff0c;還可以通過軟…

    TC3xx中PFLASH緩存對XCP標定常量的影響

    1、TC3xx中PFLASH緩存&#xff08;Cache&#xff09;對XCP標定的影響 XCP的映射用到TC3XX的Overlay功能需要使用一段Pflash內存。 Pflash數據有兩個段區。分別為0x80000000和0xA0000000為起始地址的PFLASH段。 如上&#xff0c;兩段數據的區別是一個段8有CACHE緩存&#xff0c;…

    代碼審計服務:如何解決誤報與漏報難題,保障軟件安全?

    代碼審計服務在保障軟件質量、安全合規等方面扮演著關鍵角色&#xff0c;特別是在數字化浪潮席卷而來的今天&#xff0c;其重要性日益顯著。它能揭露代碼中的不足&#xff0c;進而為軟件開發提供有力的效率和安全性保障。 誤報與漏報難題 常規的代碼審查工具&#xff0c;其錯…

    web方向第一次考核內容

    一.考核內容 Web組大一下考核之HTML、CSS 1.為什么要清除浮動&#xff08;4)&#xff0c;清除浮動的方法有哪些&#xff1f;(6)&#xff08;至少兩種&#xff09; 2.怎么實現左邊左邊寬度固定右邊寬度自適應的布局&#xff1f;(10) 3.講講flex:1;(10) 4.怎么實現移動端適配不同…

    HarmonyOS 5 Cordova有哪些熱門插件?

    以下是 HarmonyOS 5 環境下 Cordova 的熱門插件及核心代碼實現&#xff08;綜合實際開發場景高頻使用&#xff09;&#xff1a; 一、核心工具類插件 1. ?高性能圖片壓縮插件? ?功能?&#xff1a;直接調用鴻蒙 ImageSource API 實現硬件級加速壓縮 ?代碼實現?&#xff…

    Cesium圓錐漸變色實現:融合頂點著色器、Canvas動態貼圖與靜態紋理的多方案整合

    在Cesium中渲染圓錐體時&#xff0c;無論采用頂點著色器、Canvas動態貼圖還是靜態圖片貼圖&#xff0c;其漸變色均需滿足以下條件&#xff1a; 圓形結構&#xff1a;漸變范圍限定在圓錐底面的圓形區域內。徑向擴散&#xff1a;顏色從圓心向外逐步變化&#xff08;如紅→黃→藍…

    周末復習1

    質量管理包括質量規劃&#xff0c;質量保證&#xff0c;質量控制。質量管理體系要定期執行內部審核和管理評審。二者都屬于質量保證過程。 實施質量保證的方法很多&#xff0c;過程分析屬于實施質量保證的常用方法。 采購管理過程包括編制采購計劃,實施采購,控制采購和結束采購…

    英飛凌亮相SEMICON China 2025:以SiC、GaN技術引領低碳化與數字化未來

    在剛剛落幕的SEMICON China 2025上&#xff0c;全球半導體行業再度匯聚上海&#xff0c;共同探討產業未來。本屆展會以“跨界全球?心芯相聯”為主題&#xff0c;覆蓋芯片設計、制造、封測、設備及材料等全產業鏈&#xff0c;充分展現了半導體技術的最新突破與創新趨勢。 作為…

    工業路由器賦能倉庫消防預警,智慧消防物聯網解決方案

    在現代物流與倉儲行業蓬勃發展的當下&#xff0c;倉庫的規模與存儲密度不斷攀升&#xff0c;消防預警的重要性愈發凸顯。傳統消防系統在應對復雜倉庫環境時&#xff0c;預警滯后、設備聯動不暢、數據管理困難等弊端逐漸暴露。為了有效解決這些問題&#xff0c;工業路由器作為物…

    【開發常用命令】:服務器與本地之間的數據傳輸

    服務器與本地之間的數據傳輸 本地給服務器上傳數據 scp /path/to/local_file usernameremotehost:/path/to/remote_directory例如 scp test.txt root192.168.1.xxx:/test # test.txt 需要上傳到服務器的文件&#xff0c;如果非當前路徑&#xff0c;使用文件的相對路徑或絕對…