Nacos 2.x 系列【8】集成 Spring Cloud Gateway

文章目錄

    • 1. 概述
      • 1.1 API 網關
      • 1.1 Spring Cloud Gateway
    • 2. 集成案例
      • 2.1 入門案例
      • 2.2 動態路由

1. 概述

1.1 API 網關

API網關已經成為了微服務架構的一個標配組件,是系統對外的唯一入口。所有的客戶端都通過統一的網關接入微服務,在網關層處理所有非業務功能。

API網關的主要作用包括如下幾點:

  1. 統一對外接口
  2. 增加系統安全性
  3. 統一鑒權
  4. 服務注冊與授權
  5. 服務限流
  6. 提升預發能力
  7. 全鏈路跟蹤

常用網關解決方案:

  1. Netflix Zuul(已被淘汰)
  2. Spring Cloud Gateway
  3. Nginx + Lua
  4. Kong
  5. Traefik
  6. Orange

1.1 Spring Cloud Gateway

官方文檔

Spring Cloud Gateway是基于Spring生態系統之上構建的API網關,包括Spring 6Spring Boot 3Project Reactor

Netflix Zuul的替代方案,不僅提供統一的路由方式,還提供安全、指標度量、限流等方面的功能。 依托于Spring Cloud生態,Spring Cloud Gateway已經成為微服務架構中最流行的API網關。

Spring Cloud Gateway三大核心概念:

  • Route:路由,網關的基本構建塊。它由一個ID、一個目標URI、一組謂詞和一組過濾器定義。
  • PredicateJava 8中的函數謂詞,輸入類型為Spring Framework ServerWebExchange,允許匹配HTTP請求中的任何內容,例如標頭或參數。如果聚合謂詞為true,則匹配路由。
  • Filter:過濾器,Gateway Filter的實例,由特定工廠構建,可以在發送下游請求之前或之后修改請求和響應。

2. 集成案例

2.1 入門案例

在之前的測試工程中創建一個網關模塊gateway-demo
在這里插入圖片描述

引入spring-cloud-starter-gateway依賴:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.pearl</groupId><artifactId>nacos-demo</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>gateway-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>gateway-demo</name><description>gateway-demo</description><properties><java.version>17</java.version></properties><dependencies><!--API 網關--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

spring-cloud-starter-gateway依賴中包含了網關以及WebFlux
在這里插入圖片描述

啟動類:

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

application.yml添加端口、服務名、路由規則配置:

server:port: 80
spring:application:name: gateway-democloud:gateway:routes:- id: order-demo                # 路由唯一IDuri: http://localhost:9001    # 目標URIpredicates:                   # 斷言,為真則匹配成功- Path=/order/**            # 配置規則Path,如果是order開頭的請求,則會將該請求轉發到目標URI 

啟動項目查看日志,可以看到底層使用的是Netty
在這里插入圖片描述
首先,我們直接訪問訂單服務中的接口:
在這里插入圖片描述

然后通過網關地址訪問,可以看到網關根據路由配置進行了轉發:
在這里插入圖片描述

2.2 動態路由

在上面的案例中,我們的路由都是寫在配置文件中的,在微服務架構中,后臺有很多個,地址也是動態的,這么配置肯定是不現實的,所以Spring Cloud Gateway提供了基于注冊中心服務發現機制的動態路由。

Spring Cloud Gateway支持與EurekaNacosConsul等進行整合,根據service ld自動從注冊中心獲取服務地址并轉發請求,這樣做的好處不僅可以通過單個端點來訪問應用的所有服務,而且在添加或移除服務實例時不用修改網關的路由配置。

首先添加NacosLoad Balancer依賴:

        <!-- Nacos 服務發現客戶端--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--客戶端負載均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

application.yml添加Nacos地址以及動態路由配置:

server:port: 80
spring:application:name: gateway-democloud:nacos:# 服務發現discovery:username: nacospassword: nacos# 命名空間namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec# 服務端地址,默認:127.0.0.1:8848server-addr: 127.0.0.1:8848gateway:discovery:locator:# 開啟服務發現動態路由enabled: true# 是否將服務名稱小寫lower-case-service-id: true

通過以下方式訪問:

# 網關地址/服務注冊名/目標請求路徑  
http://localhost/app-service001/app1/test

成功通過服務名,轉發到具體的后臺應用:
在這里插入圖片描述

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

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

相關文章

部署 harbor 創建私有項目

一在 Docker harbor 節點&#xff08;192.168.11.&#xff09;上操作 1 關閉防火墻防護 systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 2 安裝docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-ma…

SSRF攻擊技術

1、SSRF形成原因 SSRF(Server-Side Request Forgery:服務器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下&#xff0c;SSRF是要目標網站的內部系統。&#xff08;因為他是從內部系統訪問的&#xff0c;所有可以通過它攻擊外網無法訪問的內部系…

思科模擬器--03.RIP協議路由--24.5.17

1.首先&#xff0c;先創建兩個個人電腦:PC0和PC1和三個路由器:R1&#xff0c;R2和R3. (訣竅:建議用文本框標注一下重要簡短的內容; 目的:降低失誤概率,提高成功率!) 第0步:(個人電腦的IP,子網掩碼和默認網關配置) 接著&#xff0c;可以先將個人電腦的IP和網關先配置一下…

ThreadLocal原理及使用

一、引言 在Java多線程編程中&#xff0c;ThreadLocal是一個非常有用的工具&#xff0c;它提供了一種將對象與線程關聯起來的機制&#xff0c;使得每個線程都可以擁有自己獨立的對象副本&#xff0c;從而避免了線程安全問題。然而&#xff0c;使用不當會導致內存泄漏問題。 二…

go 微服務框架kratos錯誤處理的使用方法及原理探究

通過go語言原生http中響應錯誤的實現方法&#xff0c;逐步了解和使用微服務框架 kratos 的錯誤處理方式&#xff0c;以及探究其實現原理。 一、go原生http響應錯誤信息的處理方法 處理方法&#xff1a; ①定義返回錯誤信息的結構體 ErrorResponse // 定義http返回錯誤信息的…

無人機飛手前途分析

無人機飛手的前途充滿了各種可能性和挑戰&#xff0c;這主要得益于無人機技術的快速發展和廣泛應用。以下是對無人機飛手前途的一些分析&#xff1a; 1. 技術發展與需求增長&#xff1a;隨著無人機技術的不斷進步&#xff0c;其應用場景也在持續擴大。從地理測繪、巡檢、農林植…

利用阿里OSS服務給文件設置過期刪除--簡單版

在云存儲廣泛應用的今天&#xff0c;阿里云的Object Storage Service&#xff08;OSS&#xff09;以其高度可擴展性、安全性和成本效益&#xff0c;成為了眾多企業和開發者存儲海量數據的首選方案。隨著數據量的不斷膨脹&#xff0c;高效的數據管理和成本控制變得尤為重要。其中…

IT學習筆記--Kafka

Kafka概述: 定義: Kafka是一個分布式的基于發布/訂閱模式的消息隊列&#xff0c;主要應用于大數據實時處理領域。 消息隊列消息隊列的兩種模式: 點對點模式: 消息生產者生產消息發送到Queue中&#xff0c;然后消息消費者從Queue中取出并且消費消息。 消息被消費以后&#…

Linux中解決普通用戶使用不了sudo問題

目錄 sudo的使用場景sudo使用不了的原因解決方法 sudo的使用場景 之前我們介紹了文件的權限問題 如果一個普通用戶想去執行一個它命令之外的權限&#xff0c;只能使用sudo 比如普通用戶使用yum去安裝軟件&#xff0c;需要sudo yum xxxx sudo使用不了的原因 這里我們用普通用戶…

小恐龍跳一跳源碼

小恐龍跳一跳源碼是前兩年就火爆過一次的小游戲源碼&#xff0c;不知怎么了今年有火爆了&#xff0c;所以今天就吧這個源碼分享出來了&#xff01;有喜歡的直接下載就行&#xff0c;可以本地單機直接點擊index.html進行運行&#xff0c;又或者放在虛擬機或者服務器上與朋友進行…

python 獲取視頻的時長

以下是幾種獲取視頻時長的實現方法&#xff1a; 方法一&#xff1a;使用moviepy庫 from moviepy.editor import VideoFileClipdef get_video_duration(file_path):video VideoFileClip(file_path)duration video.durationvideo.close()return duration 方法二&#xff1a;…

SAP-FICO-憑證編號控制

成本憑證編號KANK 如果自己的公司下沒有&#xff0c;直接復制系統原有的就可以。使用系統默認即可。 如果不維護 會報錯“CO-憑證編號分配對于成本控制范圍****中的商業事務COIN無效” 財務憑證編號FBN1 可以用OBH2批量復制編號范圍。 物料賬期MMPV 財務賬期OB52

python使用base加密解密

原理 base編碼是一種加密解密措施&#xff0c;目前常用的有base16、base32和base64。其大致原理比較簡單。 以base64為例&#xff0c;base64加密后共有64中字符。其加密過程是編碼后將每3個字節作為一組&#xff0c;這樣每組就有3*824位。將每6位作為一個單位進行編碼&#xf…

1個逗號,提升Python代碼質量

有些時候&#xff0c;我們會在Python代碼中看到列表或其他科迭代對象的結尾會存在一個逗號&#xff1a; 而且編輯器和解釋器都容許這種逗號的存在&#xff0c;它就叫作拖尾逗號。 通常是為了在頻繁地增減數組元素的時候同時保證語法的正確&#xff0c;且拖尾逗號不占用數組的長…

MySQL 主備環境搭建 docker

MySQL 主備環境搭建 docker 拉取docker鏡像 sudo docker pull mysql:8.0 啟動容器 docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0配置 M…

第四十二天 | 背包問題理論

二維&#xff1a; 1.dp[i][j] 表示從下標為[0-i]的物品里任意取&#xff0c;放進容量為j的背包&#xff0c;價值總和最大是多少。 2.遞歸公式&#xff1a; dp[i][j] max(dp[i - 1][j], dp[i - 1][j - weight[i]] value[i]); 3.初始化&#xff1a; 首先從dp[i][j]的定義出發…

基于xilinx fpga RFSOC系列的Ultrascale+ RF Data Converter ip詳解說明

目錄 1 概述2 IP功能2.1 ADC性能2.2 DAC性能3 IP端口4 代碼框架4.1 ADC功能框圖4.2 DAC功能框圖5 收發數據時序5.1 ADC數據格式5.2 DAC數據格式6 時鐘配置6.1 ADC/DAC參考時鐘7 數據格式配置模式7.1 ADC的配置模式7.1.1 Real -> real;7.1.2 Real ->IQ;7.1.3 IQ -> IQ;…

【設計模式】JAVA Design Patterns——Bridge(橋接模式)

&#x1f50d;目的 將抽象與其實現分離&#xff0c;以便二者可以獨立變化。 &#x1f50d;解釋 真實世界例子 考慮一下你擁有一種具有不同附魔的武器&#xff0c;并且應該允許將具有不同附魔的不同武器混合使用。 你會怎么做&#xff1f; 為每個附魔創建每種武器的多個副本&…

當代人工智能三教父——深度學習三巨頭

文章目錄 引言 人物介紹 突出貢獻 專業名詞解釋 引言 今天下午閑來無事翻閱了一下csdn首頁的頭條文章——《27 歲天才創始人 Joel Hellermark 分享了自己和“AI 教父” Geoffery Hinton 的最新采訪》 感覺挺有意思&#xff0c;就從頭到尾的看了一遍&#xff0c;里面有很多…

pyqt5與yolov5進行視頻檢測(一)——登錄操作

項目效果展示 一、登錄界面 二、主界面 目前在更新中。。。 一、設計 二、登錄代碼 注意&#xff1a;下面會導入主界面的包&#xff0c;圖片資源自己設計一下&#xff0c;密碼保存時沒設計加密&#xff0c;需要自行設計 main_window主界面下文會設計from main_window impor…