Spring Cloud Gateway-系統保護Sentinel集成

文章目錄

    • Sentinel介紹
    • Spring Cloud Gateway集成Sentinel
      • pom依賴
      • Sentinel配置
      • Sentinel集成Nacos作為數據源
      • 自定義降級響應

Sentinel介紹

? 隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分布式、多語言異構化服務架構的流量治理組件,主要以流量為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統自適應過載保護、熱點流量防護等多個維度來幫助開發者保障微服務的穩定性。 — 摘自官網

Spring Cloud Gateway集成Sentinel

pom依賴

? 添加spring cloud gateway sentinel的starter依賴。

<!-- SpringCloud Alibaba Sentinel Gateway -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>

Sentinel配置

? 引入starter依賴后只需要一些配置就可以實現網關對于后端API的流控,降級等功能,具體的實現starter提供實現,Spring Cloud Gateway可以讓spring-cloud-alibaba-sentinel-gateway中的自動化配置生效,配置前綴前綴為spring.cloud.sentinel.filter.scg

  • Spring Cloud Alibaba Sentinel 提供了這些配置選項
配置項含義默認值
spring.cloud.sentinel.enabledSentinel自動化配置是否生效true
spring.cloud.sentinel.eager是否提前觸發 Sentinel 初始化false
spring.cloud.sentinel.transport.port應用與Sentinel控制臺交互的端口,應用本地會起一個該端口占用的HttpServer(可以不配置)8719
spring.cloud.sentinel.transport.dashboardSentinel 控制臺地址(可以配置host:port,這樣就不用單獨配置port)
spring.cloud.sentinel.transport.heartbeat-interval-ms應用與Sentinel控制臺的心跳間隔時間
spring.cloud.sentinel.transport.client-ip此配置的客戶端IP將被注冊到 Sentinel Server 端
spring.cloud.sentinel.filter.orderServlet Filter的加載順序。Starter內部會構造這個filterInteger.MIN_VALUE
spring.cloud.sentinel.filter.url-patterns數據類型是數組。表示Servlet Filter的url pattern集合/*
spring.cloud.sentinel.filter.enabledEnable to instance CommonFiltertrue
spring.cloud.sentinel.metric.charsetmetric文件字符集UTF-8
spring.cloud.sentinel.metric.file-single-sizeSentinel metric 單個文件的大小
spring.cloud.sentinel.metric.file-total-countSentinel metric 總文件數量
spring.cloud.sentinel.log.dirSentinel 日志文件所在的目錄
spring.cloud.sentinel.log.switch-pidSentinel 日志文件名是否需要帶上pidfalse
spring.cloud.sentinel.servlet.block-page自定義的跳轉 URL,當請求被限流時會自動跳轉至設定好的 URL
spring.cloud.sentinel.flow.cold-factorhttps://github.com/alibaba/Sentinel/wiki/%E9%99%90%E6%B5%81— %E5%86%B7%E5%90%AF%E5%8A%A8[冷啟動因子]3
spring.cloud.sentinel.zuul.order.preSentinelZuulPreFilter 的 order10000
spring.cloud.sentinel.zuul.order.postSentinelZuulPostFilter 的 order1000
spring.cloud.sentinel.zuul.order.errorSentinelZuulErrorFilter 的 order-1
spring.cloud.sentinel.scg.fallback.modeSpring Cloud Gateway 熔斷后的響應模式(選擇 redirect or response)
spring.cloud.sentinel.scg.fallback.redirectSpring Cloud Gateway 響應模式為 ‘redirect’ 模式對應的重定向 URL
spring.cloud.sentinel.scg.fallback.response-bodySpring Cloud Gateway 響應模式為 ‘response’ 模式對應的響應內容
spring.cloud.sentinel.scg.fallback.response-statusSpring Cloud Gateway 響應模式為 ‘response’ 模式對應的響應碼429
spring.cloud.sentinel.scg.fallback.content-typeSpring Cloud Gateway 響應模式為 ‘response’ 模式對應的 content-typeapplication/json

請注意。這些配置只有在 Servlet 環境下才會生效,RestTemplate 和 Feign 針對這些配置都無法生效

? 表格中的配置看似很多,實際上應用的并不多,有些配置使用默認值即可,根據實際需求配置響應參數即可,這里我給出一個我本地的一個配置示例,配置直接使用可能有問題,因為我這里只摘取了spring.cloud.gateway.sentinel的相關配置,僅供參考。

spring:application:name: ruuby-gatewayprofiles:active: devcloud:gateway:routes:- id: account-svcuri: lb://account-svcpredicates:- Path=/gateway/account/**filters:- StripPrefix=1sentinel:# 取消控制臺懶加載eager: truetransport:# 控制臺地址dashboard: 127.0.0.1:8080filter:enabled: true# 配置默認fallback,也可以編碼自定義fallback  scg.fallback:mode: responseresponse-status: 444response-body: 1234scg:order: -100

? 配置完成后啟動網關,這時候可以在Sentinel控制臺中看到gateway已經注冊到了Sentinel控制臺,但是沒有任何資源,這時候需要手動創建資源,資源就是Sentinel系統保護的一個單元。在Spring Cloud Gateway中配置的資源可以是url,也可以是轉發服務的服務id,也就是服務發現的service,如上配置中的account-svc,所以我們在Sentinel控制臺就可以創建熔斷或限流規則,我這里創建了一個流控規則,API名稱就是account-svc,API類型是Route ID,閾值類型是QPS,單機的閾值是0,如下圖:
在這里插入圖片描述

? 這就意味著一個請求都不會轉發到account-svc服務的請求,因為閾值設置為0,請求結果如下:

在這里插入圖片描述

account-svc是一個使用Spring Cloud Alibaba開發腳手架開發的一個業務服務,后面在講到服務發現注冊的時候會把該服務的一些代碼寫出來,也可以參考GitHub。

Sentinel集成Nacos作為數據源

? 在生產系統中,我們往往不會對接Sentinel的控制臺,而且想在服務啟動時就已經把Sentinel控制的資源配置好,這個時候我們可以將Sentinel控制的數據源配置起來,這里就以Nacos為例,將Sentinel的資源配置通過Nacos配置中心管理。

? spring-cloud-alibaba-sentinel-gatewaystarter中已經提供了Sentinel DataSource的相關依賴,我們在使用時只需要配置即可。配置內容如下:

  • ruuby-gateway-dev.yml配置
server:port: 8081spring:application:name: ruuby-gatewayprofiles:active: devcloud:nacos:username: "nacos"password: "nacos"discovery:# 服務注冊中心地址server-addr: 127.0.0.1:8848# 阿里云平臺ak,sk# access-key:# secret-key:namespace: 3ef5e608-6ee8-4881-8e50-ed47a5a04af2config:server-addr: 127.0.0.1:8848# 阿里云平臺ak,sk# access-key:# secret-key:# 配置文件格式file-extension: ymlshared-configs:- ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}namespace: 3ef5e608-6ee8-4881-8e50-ed47a5a04af2group: DEFAULT-GROUPgateway:routes:- id: account-svcuri: lb://account-svcpredicates:- Path=/gateway/account/**filters:- StripPrefix=1sentinel:# 取消控制臺懶加載eager: truetransport:# 控制臺地址dashboard: 127.0.0.1:8080# nacos配置持久化datasource:ds1:nacos:server-addr: 127.0.0.1:8848dataId: ${spring.application.name}-sentinel-${spring.profiles.active}.jsonnamespace: 3ef5e608-6ee8-4881-8e50-ed47a5a04af2groupId: DEFAULT_GROUPdata-type: jsonrule-type: gw-flowfilter:enabled: true# 配置默認fallback,也可以編碼自定義fallback  scg.fallback:mode: responseresponse-status: 444response-body: 1234scg:order: -100

? spring.cloud.sentinel.datasource配置制定數據源,數據源可以是多個,這里使用的是nacos,配置的Sentinel規則的配置文件是${spring.application.name}-sentinel-${spring.profiles.active}.json也就是ruuby-gateway-sentinel-dev.json,配置內容格式為json,該配置內容如下:

[{"resource": "account-svc","count": 5,"grade": 0,"limitApp": "default"}
]

? 啟動網關,這時可以在Sentinel控制臺上看到我們在json文件中配置好的流控規則,如下圖:

在這里插入圖片描述

? 這時如果在Nacos修改參數會同步到Sentinel控制臺,但是從Sentinel控制臺修改參數不會同步到Nacos配置中心,所以生產上如果使用Nacos作為Sentinel數據源的話,建議從Nacos上修改Sentinel資源參數。

自定義降級響應

? 通過上面的實驗,我們可以知道通過配置spring.cloud.gateway.sentinel.filter.scg.fallback可以實現服務降級后的返回,Spring Cloud Gateway Sentinel也提供了接口讓開發人員實現自定義的服務降級響應,只要實現BlockRequestHandler即可,代碼如下:

@Slf4j
public class SentinelFallbackHandler implements BlockRequestHandler {@Overridepublic Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange,Throwable throwable) {log.info(LogUtil.marker(), "SCG Sentinel blocked!");return ServerResponse.status(444).contentType(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue("SCG Sentinel blocked!"));}
}

? 自定義降級配置代碼如下:

@Configuration
public class GatewayConfiguration {@Bean@Order(Ordered.HIGHEST_PRECEDENCE)public SentinelFallbackHandler sentinelFallbackHandler() {return new SentinelFallbackHandler();}
}

注:使用自定義降級時不能配置spring.cloud.gateway.sentinel.filter.scg.fallback,配置的優先級是大于自定義實現的

? 測試結果如下:

在這里插入圖片描述

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

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

相關文章

HTML5:七天學會基礎動畫網頁6

CSS3自定義字體 ①&#xff1a;首先需要下載所需字體 ②&#xff1a;把下載字體文件放入 font文件夾里&#xff0c;建議font文件夾與 css 和 image文件夾平級 ③&#xff1a;引入字體&#xff0c;可直接在html文件里用font-face引入字體&#xff0c;分別是字體名字和路徑 例…

Django官網項目

項目準備 使用VSCODE做IDE。 檢查Python版本。 sudo apt install sudo apt update python3 --version創建項目路徑&#xff0c;創建虛擬環境&#xff0c;創建項目 路徑 \mysite 進入路徑&#xff0c;運行VSCODE 運行 "code ." 創建虛擬環境。 選擇 >python: c…

【推薦算法系列十七】:GBDT+LR 排序算法

排序算法經典中的經典 參考 推薦系統之GBDTLR 極客時間 手把手帶你搭建推薦系統 課程 邏輯回歸&#xff08;LR&#xff09;模型 邏輯回歸&#xff08;LR,Logistic Regression&#xff09;是一種傳統機器學習分類模型&#xff0c;也是一種比較重要的非線性回歸模型&#xff…

AAAI2024-分享若干篇有代碼的優秀論文-圖神經網絡、時間序列預測、知識圖譜、大模型等

圖神經網絡、大模型優化方向系列文章目錄 為了方便大家根據自己的興趣查看自己的研究方向論文&#xff0c;在這里進行了細分。如果有對其中的論文感興趣的&#xff0c;可以查看對應的文章在論文相應的代碼&#xff0c;方便快速上手學習&#xff0c;也可以借助這些代碼的學習快…

16 Educational Codeforces Round 142 (Rated for Div. 2)C. Min Max Sort(遞歸、思維、dp)

C. Min Max Sort 很不錯的一道題目&#xff0c;不過腦電波和出題人每對上&#xff0c; q w q 。 qwq。 qwq。 正難則反。 我們考慮最后一步是怎么操作的。 最后一步一定是對 1 1 1和 n n n進行操作 那么上一步呢&#xff1f; 上一步應該是對 2 2 2和 n ? 1 n-1 n?1 以此類推…

AMD“高級洞察”系列揭示Epyc Naples和Rome原型CPU早期無法啟動問題

AMD在其新的YouTube視頻系列《高級洞察》第一集中&#xff0c;由AMD首席技術官Mark Papermaster擔任主持人&#xff0c;討論了AMD在數據中心領域的突破性進展及其持續增長。然而&#xff0c;AMD在服務器業務的發展并非一帆風順&#xff0c;兩位高管公開討論了早期Epyc Naples和…

【Python】環境管理怎么選擇【virtualenv】【pipenv】【 poetry】【 conda】

前言 剛入門Python&#xff0c;看到PyCharm的環境管理選擇有好幾個選擇&#xff0c;分別是virtualenv、pipenv、venv、conda&#xff0c;只知道這些都可以用來管理Python環境的&#xff0c;但不知道這些環境有什么區別&#xff0c;所以&#xff0c;本文將對這些環境管理進行總…

Avalonia學習(二十九)-儀表

Avalonia制作儀表盤&#xff0c;把控件給大家演示一下&#xff0c;Avalonia有三類自定義控件&#xff0c;分別是用戶控件、模版控件、自主控件。前面已經很多用戶控件了&#xff0c;這個是演示模版控件&#xff0c;另外一種不知道哪種情況下使用。 前端代碼&#xff1a; <…

想從事數據方向職場小白看過來, 數據方面的一些英文解釋

想從事數據方向職場小白看過來&#xff0c;一些英文名詞解釋 文章目錄 想從事數據方向職場小白看過來&#xff0c;一些英文名詞解釋 英文類解釋NoSQL&#xff1a;ESB&#xff1a;ACID &#xff1a;Data Vault&#xff1a;MDM&#xff1a;OLAP&#xff1a;SCD:SBA&#xff1a;MP…

【Django】執行查詢——比較、刪除、復制、批量修改對象

以下述模型為基礎&#xff0c;討論檢索對象的方式方法&#xff1a; from datetime import datefrom django.db import modelsclass Blog(models.Model):name models.CharField(max_length100)tagline models.TextField()def __str__(self):return self.nameclass Author(mod…

【vue】v-if、v-show、v-for 相關所有面試題總結

v-if 和 v-show 的區別 兩個重點【dom】和【生命周期】 v-if 惰性指令&#xff0c;false 不會被編譯、渲染不會存在 DOM 中切換開銷大&#xff0c;需要重新創建元素值變化&#xff0c;使用 v-if 的組件生命周期執行順序 true 變為 false【組件的銷毀】 beforeDestroy / befor…

[Flutter]shared_preferences基本用法以及可視化管理存儲的key和value類型

shared_preferences 是一個Flutter插件&#xff0c;它提供了一種簡單的方式來在應用程序中存儲和獲取持久化的鍵值對數據。它可以用于存儲應用程序的配置信息、用戶偏好設置、登錄狀態等。 使用 shared_preferences 插件&#xff0c;你可以在應用程序中輕松地保存和讀取數據&a…

Java中線程相關的知識

創建子線程的三種方式: 1.自定義線程任務類繼承線程類&#xff0c;以便繼承其功能,重寫其run方法(里面寫自己需要實現的功能)&#xff0c;在main方法調用時創建其任務類實例化對象&#xff0c;然后調用對象的start方法(繼承自父類)&#xff0c;即成功創建線程 優點:創建方式簡…

Pandas DataFrame 基本操作實例100個

Pandas 是一個基于NumPy的數據分析模塊&#xff0c;最初由AQR Capital Management于2008年4月開發&#xff0c;并于2009年底開源。Pandas的名稱來源于“Panel Data”&#xff08;面板數據&#xff09;和“Python數據分析”&#xff08;data analysis&#xff09;。這個庫現在由…

來不及了!大學必須完成的四件事!

老師們常說&#xff0c;上大學就輕松了 其實不然 大學不是人生的終點&#xff0c;而是新的起跑線 不是休息站&#xff0c;而是進入社會的最后沖刺跑道 大學生活苦樂參半&#xff0c;成人世界即將來臨 出了校門&#xff0c;你會發現社會復雜多變&#xff0c;需要不斷學習 稍…

excel中如何使用VLOOKUP和EXACT函數實現區分大小寫匹配數據

在 Excel 中&#xff0c;VLOOKUP 函數默認情況下是不區分大小寫的&#xff1a; 比如下面的案例&#xff0c;直接使用VLOOKUP函數搜索&#xff0c;只會搜索匹配到不區分大小寫的第一個 如果我們想要實現區分大小寫的精確匹配&#xff0c;可以使用 EXACT 函數結合 VLOOKUP 函數 …

【簡說八股】Redisson的守護線程是怎么實現的

Redisson Redisson 是一個 Java 語言實現的 Redis SDK 客戶端&#xff0c;在使用分布式鎖時&#xff0c;它就采用了「自動續期」的方案來避免鎖過期&#xff0c;這個守護線程我們一般也把它叫做「看門狗」線程。 Redission是一個在Java環境中使用的開源的分布式緩存和分布式鎖實…

PyTorch-卷積神經網絡

卷積神經網絡 基本結構 首先解釋一下什么是卷積&#xff0c;這個卷積當然不是數學上的卷積&#xff0c;這里的卷積其實表示的是一個三維的權重&#xff0c;這么解釋起來可能不太理解&#xff0c;我們先看看卷積網絡的基本結構。 通過上面的圖我們清楚地了解到卷積網絡和一般網…

【Javascript】設計模式之發布訂閱模式

文章目錄 1、現實中的發布&#xff0d;訂閱模式2、DOM 事件3、簡單的發布-訂閱模式4、通用的發布-訂閱模式5、先發布再訂閱6、小結 發布—訂閱模式又叫觀察者模式&#xff0c;它定義對象間的一種一對多的依賴關系&#xff0c;當一個對象的狀態發生改變時&#xff0c;所有依賴于…

Mysql深入學習 基礎篇 Ss.02 詳解四類SQL語句

我親愛的對手&#xff0c;亦敵亦友&#xff0c;但我同樣希望你能成功&#xff0c;與我一起&#xff0c;站在人生的山頂上 ——24.3.1 一、DDL 數據定義語言 1.DDL —— 數據庫操作 查詢 查詢所有數據庫 show databases; 查詢當前數據庫 select database(); 創建 create databa…