欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud-Gateway網(wǎng)關(guān)的使用實例教程

 更新時間:2024年03月20日 11:44:53   作者:Damon小智  
Gateway網(wǎng)關(guān)在微服務(wù)架構(gòu)中扮演了不可或缺的角色,通過集中化管理、智能路由和強大的過濾器機制,為構(gòu)建高效、可擴展的微服務(wù)系統(tǒng)提供了有力支持,這篇文章主要介紹了SpringCloud-Gateway網(wǎng)關(guān)的使用,需要的朋友可以參考下

本文介紹如何在 SpringCloud 項目中引入 Gateway 網(wǎng)關(guān)并完成網(wǎng)關(guān)服務(wù)的調(diào)用。Gateway 網(wǎng)關(guān)是一個在微服務(wù)架構(gòu)中起到入口和路由控制的關(guān)鍵組件。它負責(zé)處理客戶端請求,進行路由決策,并將請求轉(zhuǎn)發(fā)到相應(yīng)的微服務(wù)。Gateway 網(wǎng)關(guān)還可以實現(xiàn)負載均衡、安全認證、日志記錄等功能,集中管理服務(wù)間的通信,提升整體系統(tǒng)的可維護性和安全性。通過 Gateway 網(wǎng)關(guān),可以實現(xiàn)統(tǒng)一的訪問點,簡化客戶端與后端微服務(wù)之間的交互,同時也能夠更靈活地進行流量控制和監(jiān)控。

一、Gateway網(wǎng)關(guān)介紹

Gateway 網(wǎng)關(guān)是一個基于 Spring Cloud 的 API 網(wǎng)關(guān)服務(wù),它提供了路由、過濾、監(jiān)控、日志等功能,用于統(tǒng)一管理和轉(zhuǎn)發(fā)微服務(wù)的請求流量。作為微服務(wù)架構(gòu)中的入口點,Gateway 網(wǎng)關(guān)可以實現(xiàn)負載均衡、安全認證、請求轉(zhuǎn)發(fā)等功能,提高了系統(tǒng)的安全性、可用性和可維護性。

網(wǎng)關(guān)的作用:

  • 對用戶請求做身份認證、權(quán)限校驗
  • 將用戶請求路由到微服務(wù),并實現(xiàn)負載均衡
  • 對用戶請求做限流

含 Gateway 網(wǎng)關(guān)項目結(jié)構(gòu)示意圖:

二、搭建Gateway網(wǎng)關(guān)

搭建Gateway網(wǎng)關(guān)需要以下步驟:

1、創(chuàng)建Gateway模塊

我們需要的開發(fā)環(huán)境中創(chuàng)建一個新的Spring Boot項目。
不會創(chuàng)建的可以參考我之前的文章:SpringCloud-創(chuàng)建多模塊項目

在SpringCloud項目上我們創(chuàng)建Gateway模塊,我命名為 springcloud-gateway。

2、引入SpringCloud-Gateway依賴

在 springcloud-gateway 項目的 pom.xml 文件中引入 Spring Cloud Gateway 的依賴。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

3、配置路由規(guī)則

編輯 applicatin.yml,配置 Gateway 網(wǎng)關(guān)的路由規(guī)則,包括定義路由路徑、目標服務(wù)等信息。

server:
  port: 8090
spring:
  application:
    name: springcloud-gateway
  cloud:
    nacos:
      server-addr: localhost:8848
    gateway:
      discovery:
          locator:
              enabled: true # 開啟自動路由
      routes: # 網(wǎng)關(guān)路由配置
        - id: gateway-service # 路由id,自定義,唯一
          uri: lb://target # 路由的目標地址,lb表示負載均衡
          predicates: # 路由斷言,判斷請求是否符合路由規(guī)則
            - Path=/gateway/** # 要求請求路徑以/user/開頭,否則404
          filters:
            - StripPrefix=1 # 轉(zhuǎn)發(fā)請求時uri過濾掉/gateway

我們添加了動態(tài)路由,這里的動態(tài)路由屬性可以自動讓網(wǎng)關(guān)的轉(zhuǎn)發(fā)請求負載均衡。

這里我們用到了一個 Path 斷言,要求請求路徑以 /user/ 開頭,否則請求會返回404 (未找到服務(wù)) 。這里我們還用到了一個過濾器,讓網(wǎng)關(guān)轉(zhuǎn)發(fā)請求時,去掉前綴 /gateway。斷言工廠和過濾器的概念我們在下文進行詳細講解。

4、添加斷言

在Spring Cloud Gateway中,斷言(Predicate)用于定義請求匹配的條件,從而決定是否應(yīng)用某個過濾器鏈。以下是一些常見的Gateway斷言種類和相應(yīng)的示例:

斷言種類匹配規(guī)則示例
Path根據(jù)請求的路徑進行匹配。- Path=/api/**
匹配路徑為 "/api/**" 的請求。
Method根據(jù)請求的HTTP方法進行匹配。- Method=GET
匹配GET請求。
Header根據(jù)請求的頭部信息進行匹配。- Header=Authorization, \d+
匹配包含 "Authorization" 頭部的請求。
Host根據(jù)請求的主機名進行匹配。- Host=example.com
匹配主機名為 "example.com" 的請求。
Query根據(jù)請求的查詢參數(shù)進行匹配。- Query=category, \w+
匹配包含 "category" 參數(shù)的請求。
Cookie根據(jù)請求的Cookie進行匹配。- Cookie=sessionId, \d+
匹配包含名為 "sessionId" 的Cookie的請求。
Combining將多個斷言組合成一個邏輯條件,
實現(xiàn)更復(fù)雜的匹配。
- Path=/api/** AND Method=GET
同時匹配路徑為 "/api/**" 且是GET請求的請求。

下面來舉個例子:

server:
  port: 8090
spring:
  application:
    name: springcloud-gateway
  cloud:
    nacos:
      server-addr: localhost:8848
    gateway:
      discovery:
          locator:
              enabled: true # 開啟自動路由
      routes:
        - id: gateway-service
          uri: lb://target
          predicates:
            - Header=Authorization, Bearer 831B175-D251501-31A3F301-711636-9CAE

這里用到的最常用的 Header 斷言中的鑒權(quán)斷言,要求訪問網(wǎng)關(guān)的請求必須在請求頭里帶有 <Authorization, Bearer 831B175-D251501-31A3F301-711636-9CAE> 的鑒權(quán)碼,如果沒有鑒權(quán)碼或者鑒權(quán)碼不匹配,則返回 404。

5、添加過濾器

Spring Cloud Gateway提供了豐富的過濾器種類,這些過濾器用于在請求進入網(wǎng)關(guān)或響應(yīng)離開網(wǎng)關(guān)時執(zhí)行各種操作。以下是一些常見的Gateway過濾器種類:

過濾器種類過濾器作用
Pre Filters
(前置過濾器)
AddRequestHeader: 添加請求頭。
AddRequestParameter: 添加請求參數(shù)。
ModifyRequestBody: 修改請求體。
Route Filters
(路由過濾器)
AddResponseHeader: 添加響應(yīng)頭。
AddResponseParameter: 添加響應(yīng)參數(shù)。
Hystrix: 集成Hystrix斷路器,提供服務(wù)容錯能力。
Post Filters
(后置過濾器)
SetStatus: 設(shè)置響應(yīng)狀態(tài)碼。
ModifyResponseBody: 修改響應(yīng)體。
Error Filters
(錯誤過濾器)
SendError: 處理請求發(fā)生錯誤時的操作。
ExceptionHandler: 自定義異常處理。
Global Filters
(全局過濾器)
GlobalFilter: 全局過濾器,適用于所有路由。
Ordered: 為過濾器設(shè)置順序。
Custom Filters
(自定義過濾器)
自定義實現(xiàn)GatewayFilter接口: 開發(fā)者可以通過實現(xiàn)該接口創(chuàng)建自定義的過濾器。

這些過濾器可以按照需求進行組合和配置,使得開發(fā)者可以在Gateway中實現(xiàn)各種復(fù)雜的請求和響應(yīng)處理邏輯。通過合理配置過濾器,可以實現(xiàn)日志記錄、認證授權(quán)、請求重試、熔斷器等功能,提高網(wǎng)關(guān)的靈活性和可擴展性。

下面我們來舉個例子:

server:
  port: 8090
spring:
  application:
    name: springcloud-gateway
  cloud:
    nacos:
      server-addr: localhost:8848
    gateway:
      discovery:
          locator:
              enabled: true # 開啟自動路由
      routes:
        - id: gateway-service
          uri: lb://target
          predicates:
            - Path=/gateway/**
          filters:
            - StripPrefix=1
            - AddRequestHeader=test_header, damon0806

這里可以看到,我們在 routes(網(wǎng)關(guān)路由)下配置了 filters(過濾器)。

  • StripPrefix=1:表示從請求的URI中去除前綴的數(shù)量。在這里,1 表示去除兩級路徑的前綴。例如,如果原始請求是 /path1/rest-of-the-uri,使用此配置后,轉(zhuǎn)發(fā)到后端的請求 URI 將是 /rest-of-the-uri。
  • AddRequestHeader=test_header, damon0806:表示在請求頭中添加一個自定義的頭部。具體來說,它添加了一個名為 test_header 的頭部,其值為 damon0806。這可以用于在請求發(fā)送到后端服務(wù)時傳遞額外的信息或標識。

6、啟動網(wǎng)關(guān)服務(wù)

編寫 springcloud-gateway 的啟動類,啟動 Gateway 網(wǎng)關(guān)服務(wù),使其開始監(jiān)聽和轉(zhuǎn)發(fā)請求。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringcloudGatewayApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringcloudGatewayApplication.class, args);
	}
}

7、測試路由

可以使用 Postman 等接口測試工具發(fā)送請求,測試 Gateway 網(wǎng)關(guān)是否能夠正確轉(zhuǎn)發(fā)請求到相應(yīng)的微服務(wù),以及斷言工廠或者過濾器是否實現(xiàn)。

三、Gatway網(wǎng)關(guān)的作用

Gateway 網(wǎng)關(guān)作為微服務(wù)架構(gòu)中的入口點,扮演著關(guān)鍵的角色。

其作用主要體現(xiàn)在以下幾個方面:

作用點詳細描述
路由
(Routing)
Gateway能夠根據(jù)請求的路徑,將請求路由到相應(yīng)的微服務(wù)實例上。簡化了服務(wù)調(diào)用的過程,使得客戶端無需直接關(guān)注每個微服務(wù)的位置和細節(jié)。
負載均衡
(Load Balancing)
Gateway支持負載均衡,可將請求均勻地分發(fā)到多個微服務(wù)實例,提高系統(tǒng)的可用性和性能。有效避免了單一服務(wù)實例的過載,提高了整體系統(tǒng)的穩(wěn)定性。
過濾
(Filtering)
Gateway可以通過過濾器實現(xiàn)對請求和響應(yīng)進行處理,如添加、修改請求頭、記錄日志、認證、鑒權(quán)等操作。統(tǒng)一處理與安全、日志、性能等相關(guān)的邏輯,使得系統(tǒng)更加易于維護和管理。
熔斷器
(Circuit Breaker)
Gateway支持熔斷器機制,當(dāng)某個微服務(wù)出現(xiàn)故障或超時時,能夠自動切換到備用服務(wù),防止故障向下游傳遞。提高了系統(tǒng)的容錯性,減少了因單一服務(wù)故障而導(dǎo)致整個系統(tǒng)不穩(wěn)定的風(fēng)險。
統(tǒng)一異常處理
(Exception Handling)
Gateway可以統(tǒng)一處理微服務(wù)中的異常,提供友好的錯誤提示,防止細節(jié)泄露給客戶端。提高了系統(tǒng)的安全性和用戶體驗,降低了對異常的不良影響。
協(xié)議轉(zhuǎn)換
(Protocol Transformation)
Gateway支持協(xié)議的轉(zhuǎn)換,可以將外部請求轉(zhuǎn)換成內(nèi)部微服務(wù)所需的協(xié)議。降低了微服務(wù)之間的耦合度,允許使用不同的協(xié)議進行通信。

Gateway網(wǎng)關(guān)在微服務(wù)架構(gòu)中承擔(dān)了集中處理、管理和保護服務(wù)的責(zé)任,通過提供統(tǒng)一的入口和處理機制,使得微服務(wù)系統(tǒng)更加穩(wěn)定、靈活和易于維護。

四、Gateway網(wǎng)關(guān)服務(wù)的調(diào)用

下面是前端 Ajax 調(diào)用網(wǎng)關(guān)服務(wù)的實例:

前端 JavaScript 代碼:

$.ajax({
    type: "POST",
    url: "http://localhost:8090/gateway/getUserList",
    data: {},
    dataType: 'json'
});

網(wǎng)關(guān)配置如下:

server:
  port: 8090
spring:
  application:
    name: springcloud-gateway
  cloud:
    nacos:
      server-addr: localhost:8848
    gateway:
      discovery:
          locator:
              enabled: true # 開啟自動路由
      routes:
        - id: gateway-service
          uri: lb://target
          predicates:
            - Path=/gateway/**
          filters:
            - StripPrefix=1
            - AddRequestHeader=test_header, damon0806

當(dāng)我們執(zhí)行上述 Ajax 請求時,請求會被網(wǎng)關(guān)轉(zhuǎn)發(fā)到 lb://target/getUserList 上。

五、Gateway網(wǎng)關(guān)總結(jié)

Gateway網(wǎng)關(guān)作為微服務(wù)架構(gòu)中的關(guān)鍵組件,承擔(dān)著諸多重要任務(wù),為整個系統(tǒng)提供了一種高效、可靠的服務(wù)入口。以下是對Gateway網(wǎng)關(guān)的總結(jié):

要點要點詳細內(nèi)容
統(tǒng)一入口Gateway網(wǎng)關(guān)為微服務(wù)提供了一個統(tǒng)一的入口,客戶端通過與網(wǎng)關(guān)交互,無需直接訪問每個微服務(wù),簡化了服務(wù)調(diào)用的復(fù)雜性。
路由與負載均衡Gateway能夠根據(jù)路由規(guī)則將請求動態(tài)轉(zhuǎn)發(fā)到不同的微服務(wù)實例,同時支持負載均衡,提高了系統(tǒng)的可用性和性能。
過濾器與攔截通過過濾器,Gateway網(wǎng)關(guān)能夠在請求進入網(wǎng)關(guān)或響應(yīng)離開網(wǎng)關(guān)時執(zhí)行一系列操作,如鑒權(quán)、認證、日志記錄等,增強了系統(tǒng)的安全性和可維護性。
熔斷與異常處理Gateway網(wǎng)關(guān)支持熔斷器機制,能夠處理微服務(wù)的異常情況,避免故障的擴散。統(tǒng)一的異常處理機制提高了系統(tǒng)的穩(wěn)定性和用戶體驗。
協(xié)議轉(zhuǎn)換與透明性Gateway網(wǎng)關(guān)允許協(xié)議的轉(zhuǎn)換,為微服務(wù)提供了透明的通信機制。這使得微服務(wù)之間可以使用不同的通信協(xié)議,提高了系統(tǒng)的靈活性。
集中式管理Gateway網(wǎng)關(guān)提供了集中管理微服務(wù)的能力,可以在一個地方配置和管理所有微服務(wù)的路由規(guī)則和過濾器,降低了系統(tǒng)的維護成本。
性能監(jiān)控與日志記錄Gateway網(wǎng)關(guān)可以通過集成性能監(jiān)控工具和記錄詳細日志,幫助開發(fā)人員更好地了解系統(tǒng)的運行狀況,方便進行性能優(yōu)化和故障排查。

綜上所述,Gateway網(wǎng)關(guān)在微服務(wù)架構(gòu)中扮演了不可或缺的角色,通過集中化管理、智能路由和強大的過濾器機制,為構(gòu)建高效、可擴展的微服務(wù)系統(tǒng)提供了有力支持。其優(yōu)勢在于簡化了開發(fā)、提高了系統(tǒng)的可維護性,并在面對復(fù)雜的微服務(wù)架構(gòu)時提供了一種優(yōu)雅的解決方案。

到此這篇關(guān)于SpringCloud-Gateway網(wǎng)關(guān)的使用的文章就介紹到這了,更多相關(guān)SpringCloud Gateway網(wǎng)關(guān)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java設(shè)計模式--原型模式詳解

    java設(shè)計模式--原型模式詳解

    這篇文章主要為大家詳細介紹了Java設(shè)計模式之Prototype原型模式的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 淺析Java中如何優(yōu)雅地處理null值

    淺析Java中如何優(yōu)雅地處理null值

    這篇文章主要為大家詳細介紹了如何結(jié)合 Lambda 表達式和 Optional,讓 Java 更優(yōu)雅地處理 null 值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Spring AOP的五種通知方式代碼實例

    Spring AOP的五種通知方式代碼實例

    這篇文章主要介紹了Spring AOP的五種通知方式代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Java編程讀寫鎖詳解

    Java編程讀寫鎖詳解

    本篇文章給大家詳細分享了Java編程讀寫鎖的相關(guān)原理以及知識點內(nèi)容,有興趣的朋友們可以參考下。
    2018-08-08
  • 深入了解Java包與訪問控制權(quán)限

    深入了解Java包與訪問控制權(quán)限

    這篇文章主要帶你掌握Java中包的定義及使用以及Java中的4種訪問權(quán)限,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09
  • Spring注解中@Autowired和@Bean的區(qū)別詳解

    Spring注解中@Autowired和@Bean的區(qū)別詳解

    這篇文章主要詳細介紹了Spring注解中@Autowired和@Bean二者有什么區(qū)別,文中通過兩個注解的使用場景介紹了二者的區(qū)別,感興趣的同學(xué)可以參考閱讀
    2023-06-06
  • tomcat請求流程源碼解進階篇

    tomcat請求流程源碼解進階篇

    這篇文章主要為大家介紹了tomcat請求流程源碼解進階,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java下載文件時文件名亂碼問題解決辦法

    Java下載文件時文件名亂碼問題解決辦法

    我最近在開發(fā)時遇到了文件另存為時文件名出現(xiàn)亂碼,在火狐上正常的文件名,在IE中又出現(xiàn)亂碼問題,然后好不容易在IE下調(diào)試好了文件名亂碼問題,在火狐下又出現(xiàn)亂碼,最后終于感覺這樣是能解決了。具體如下:
    2013-04-04
  • IDEA的常見的設(shè)置和優(yōu)化功能圖文詳解

    IDEA的常見的設(shè)置和優(yōu)化功能圖文詳解

    這篇文章主要介紹了IDEA的常見的設(shè)置和優(yōu)化功能,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Android開發(fā)中Socket通信的基本實現(xiàn)方法講解

    Android開發(fā)中Socket通信的基本實現(xiàn)方法講解

    這篇文章主要介紹了Android開發(fā)中Socket通信的基本實現(xiàn)方法講解,是安卓上移動互聯(lián)網(wǎng)程序開發(fā)的基礎(chǔ),需要的朋友可以參考下
    2015-12-12

最新評論