《Sentinel服務保護實戰:控制臺部署與SpringCloud集成指南》

sentinel 介紹

Sentinel是阿里巴巴開源的一款服務保護框架,目前已經加入SpringCloudAlibaba中。官方網站:

home | Sentinel

Sentinel 的使用可以分為兩個部分:

  • 核心庫(Jar包):不依賴任何框架/庫,能夠運行于 Java 8 及以上的版本的運行時環境,同時對 Dubbo / Spring Cloud 等框架也有較好的支持。在項目中引入依賴即可實現服務限流、隔離、熔斷等功能。

  • 控制臺(Dashboard):Dashboard 主要負責管理推送規則、監控、管理機器信息等。

Sentinel的控制臺搭建

1)下載jar包

下載地址:

https://github.com/alibaba/Sentinel/releases

2)運行

將jar包放在任意非中文、不包含特殊字符的目錄下,重命名為sentinel-dashboard.jar

然后運行如下命令啟動控制臺:

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

3)訪問

訪問http://localhost:8090頁面,就可以看到sentinel的控制臺了:

需要輸入賬號和密碼,默認都是:sentinel

微服務整合

1)引入sentinel依賴

<!--sentinel-->
<dependency><groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2)配置控制臺

修改application.yaml文件,添加下面內容:

spring:cloud: sentinel:transport:dashboard: localhost:8090

3)訪問service服務的任意端點

默認情況下Sentinel會把路徑作為簇點資源的名稱,無法區分路徑相同但請求方式不同的接口,查詢、刪除、修改等都被識別為一個簇點資源,這顯然是不合適的。

所以我們可以選擇打開Sentinel的請求方式前綴,把請求方式 + 請求路徑作為簇點資源名:

首先,在cart-serviceapplication.yml中添加下面的配置:

spring:cloud:sentinel:transport:dashboard: localhost:8090http-method-specify: true # 開啟請求方式前綴

然后,重啟服務,通過頁面訪問購物車的相關接口,可以看到sentinel控制臺的簇點鏈路發生了變化:

OpenFeign整合Sentinel

修改cart-service模塊的application.yml文件,開啟Feign的sentinel功能:

feign:sentinel:enabled: true # 開啟feign對sentinel的支持

需要注意的是,默認情況下SpringBoot項目的tomcat最大線程數是200,允許的最大連接是8492,單機測試很難打滿。

所以我們需要配置一下cart-service模塊的application.yml文件,修改tomcat連接:

server:port: 8082tomcat:threads:max: 50 # 允許的最大線程數accept-count: 50 # 最大排隊等待數量max-connections: 100 # 允許的最大連接

然后重啟cart-service服務,可以看到查詢商品的FeignClient自動變成了一個簇點資源:

編寫降級邏輯

觸發限流或熔斷后的請求不一定要直接報錯,也可以返回一些默認數據或者友好提示,用戶體驗會更好。

給FeignClient編寫失敗后的降級邏輯有兩種方式:

  • 方式一:FallbackClass,無法對遠程調用的異常做處理

  • 方式二:FallbackFactory,可以對遠程調用的異常做處理,我們一般選擇這種方式。

步驟一

在hm-api模塊中給ItemClient定義降級處理類,實現FallbackFactory

代碼如下:

package com.hmall.api.fillback;import com.hmall.api.client.ItemClients;
import com.hmall.api.dto.ItemDTO;
import com.hmall.api.dto.OrderDetailDTO;
import com.hmall.common.utils.CollUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;import java.util.Collection;
import java.util.List;@Slf4j
public class ItemClientFallbackFactory implements FallbackFactory<ItemClients> {@Overridepublic ItemClients create(Throwable cause) {return new ItemClients() {@Overridepublic List<ItemDTO> queryItemsByIds(Collection<Long> ids) {log.error("調用商品服務失敗,原因:{}", cause.getMessage());return CollUtils.emptyList();}@Overridepublic void deductStock(List<OrderDetailDTO> orderDetailDTOS) {log.error("調用商品服務扣減庫存失敗,原因:{}", cause.getMessage());// 這里可以添加一些降級邏輯,比如記錄日志、發送消息等throw new RuntimeException(cause);}};}
}

步驟二

hm-api模塊中的com.hmall.api.config.DefaultFeignConfig類中將ItemClientFallback注冊為一個Bean

步驟三

hm-api模塊中的ItemClient接口中使用ItemClientFallbackFactory

補充如果配置的熔斷降級com.hmall.api.config.DefaultFeignConfig類與要使它生效的調用不在一個包下,那么要通過在要調用的微服務的啟動類上表明注解:

@EnableFeignClients(value = "com.hmall.api.client"  , defaultConfiguration = DefaultFeignConfig.class)

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

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

相關文章

IBM Watsonx BI:AI賦能的下一代商業智能平臺

產品概覽 IBM Watsonx BI 是基于 watsonx 企業級 AI 與數據平臺 構建的智能分析解決方案&#xff0c;專為現代化企業打造。它深度融合人工智能技術&#xff0c;突破傳統 BI 工具的限制&#xff0c;通過自動化數據洞察、自然語言交互和預測分析&#xff0c;幫助企業在復雜數據環…

Python實現GO鵝優化算法優化GBRT漸進梯度回歸樹回歸模型項目實戰

說明&#xff1a;這是一個機器學習實戰項目&#xff08;附帶數據代碼文檔&#xff09;&#xff0c;如需數據代碼文檔可以直接到文章最后關注獲取 或者私信獲取。 1.項目背景 隨著大數據和人工智能技術的快速發展&#xff0c;回歸預測在金融、氣象、能源等多個領域中扮演著至關…

深度學習計算(深度學習-李沐-學習筆記)

層和塊 單一輸出的線性模型&#xff1a;單個神經網絡 &#xff08;1&#xff09;接受一些輸入&#xff1b; &#xff08;2&#xff09;生成相應的標量輸出&#xff1b; &#xff08;3&#xff09;具有一組相關 參數&#xff08;parameters&#xff09;&#xff0c;更新這些參數…

leetcode熱題——搜索二維矩陣Ⅱ

目錄 搜索二維矩陣Ⅱ 題目描述 題解 解法一&#xff1a;暴力搜索 C 代碼實現 復雜度分析 解法二&#xff1a;二分查找 C 代碼實現 復雜度分析 解法三&#xff1a;Z字形查找 算法核心思想 算法步驟詳解 C 代碼實現 復雜度分析 搜索二維矩陣Ⅱ 題目描述 編寫一個…

牛客 - 數組中的逆序對

描述 在數組中的兩個數字&#xff0c;如果前面一個數字大于后面的數字&#xff0c;則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。并將P對1000000007取模的結果輸出。 即輸出P mod 1000000007 數據范圍&#xff1a; 對于 50% 的數據, size≤104 s…

Linux 日志管理與時鐘同步詳解

Linux 日志管理與時鐘同步詳解 一、日志管理 1. 日志服務概述 Linux 系統中主要有兩種日志服務&#xff0c;分別負責臨時和永久日志的管理&#xff1a; systemd-journald&#xff1a;存儲臨時日志&#xff0c;服務器重啟后日志會丟失&#xff0c;無需手動配置rsyslog&#xff1…

個人如何做股指期貨?

本文主要介紹個人如何做股指期貨&#xff1f;個人參與股指期貨交易需要遵循一定的流程和規則&#xff0c;同時需充分了解其高風險、高杠桿的特點&#xff0c;并做好風險管理。個人如何做股指期貨&#xff1f;一、了解股指期貨基礎股指期貨是以股票價格指數為標的物的金融期貨合…

設計模式-單例模式 Java

模式概述 單例模式&#xff08;Singleton Pattern&#xff09;是設計模式中最基礎但應用最廣泛的創建型模式之一&#xff0c;確保一個類僅有一個實例&#xff0c;并提供一個全局訪問點。這種模式在需要全局唯一對象的場景中至關重要&#xff0c;如配置管理、線程池、數據庫連接…

RFID 系統行業前沿洞察:技術躍遷與生態重構

在物聯網與人工智能深度融合的時代&#xff0c;RFID&#xff08;射頻識別&#xff09;系統正經歷從 “單品識別工具” 到 “智能決策中樞” 的范式轉變。這一技術憑借其非接觸式數據采集、環境適應性強、全生命周期追溯等特性&#xff0c;在醫療、制造、農業、環保等領域引發連…

實現implements InitializingBean, DisposableBean 有什么用

在 Spring 框架中&#xff0c;實現 InitializingBean 和 DisposableBean 接口用于管理 Bean 的生命周期回調&#xff0c;分別控制 Bean 的初始化后和銷毀前行為。具體作用如下&#xff1a;1. InitializingBean 接口public interface InitializingBean {void afterPropertiesSet…

GitLab 18.2 發布幾十項與 DevSecOps 有關的功能,可升級體驗【一】

沿襲我們的月度發布傳統&#xff0c;極狐GitLab 發布了 18.2 版本&#xff0c;該版本帶來了議題和任務的自定義工作流狀態、新的合并請求主頁、新的群組概覽合規儀表盤、下載安全報告的 PDF 導出文件、中心化的安全策略管理&#xff08;Beta&#xff09;等幾十個重點功能的改進…

如何快速把Clickhouse數據同步到Mysql

直接使用Clickhouse官方支持的Mysql引擎表的方式&#xff01; 一、首先創建Mysql引擎表&#xff1a; CREATE TABLE saas_analysis.t_page_view_new_for_write (id Int64,shop_id Nullable(Int64),session_id Nullable(String),client_id Nullable(String),one_id Nullable(Str…

Kafka 重復消費與 API 冪等消費解決方案

Kafka 是一個高性能的分布式消息系統&#xff0c;但消費者重啟、偏移量&#xff08;offset&#xff09;未正確提交或網絡問題可能導致重復消費。API 冪等性設計則用于防止重復操作帶來的副作用。本文從 Kafka 重復消費和 API 冪等性兩個方面提供解決方案&#xff0c;重點深入探…

win11推遲更新

1、按住WINR2、輸入以下命令&#xff1a;reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /t reg_dword /d 10000 /f3、點擊確定4、打開搜索框5、在搜索框里邊輸入更新&#xff0c;選擇檢查更新6、在暫停…

【uniapp】---- 使用 uniapp 實現視頻和圖片上傳且都可以預覽展示

1. 前言 接手得 uniapp 開發的微信小程序項目,新的開發需求是需要同時上傳圖片和視頻,但是之前的上傳都沒有進行封裝,都是每個頁面需要的時候單獨實現,現在新的需求,有多個地方都需要上傳圖片、視頻或語音等,這樣就需要封裝一個組件,然后發現部分地方使用了 uni-file-p…

(nice!!!) (LeetCode 每日一題) 2411. 按位或最大的最小子數組長度(位運算+滑動窗口)

2411. 按位或最大的最小子數組長度 思路&#xff1a;位運算滑動窗口&#xff0c;時間復雜度0(n*32)。 **遍歷每一個元素nums[i]&#xff0c;然后看能否改變它前面的元素nums[j]&#xff08; j<i &#xff09;&#xff0c; 當(nums[j]|nums[i])nums[j]時&#xff0c;說明當前…

算法競賽階段二-數據結構(36)數據結構雙向鏈表模擬實現

//#include<bits/stdc.h> #include<iostream> using namespace std; const int N1e510; //定義 int e[N],pre[N],ne[N],h,id; int mp[N]; //頭插 // 兵 y // x void push_front (int x) {id;e[id]x;mp[x]id;pre[id]h;ne[id]ne[h];//先修改新節點…

津發科技帶你了解皮膚電信號中的SCL與SCR

皮膚電&#xff08;Electrodermal Activity, EDA&#xff09;作為一種非常容易獲取的基本生理信號&#xff0c;可以很好地量化我們的情緒反應&#xff0c;被廣泛應用于情感識別研究中。它代表機體受到刺激時皮膚電傳導的變化。皮膚電反應作為交感神經系統功能的直接指標&#x…

spark的broadcast variables

在 Spark 中&#xff0c;廣播變量&#xff08;Broadcast Variables&#xff09; 是一種特殊類型的共享變量&#xff0c;用于高效地在集群中的所有節點間分發大型只讀數據集。它解決了 Spark 任務中頻繁傳輸重復數據的性能問題&#xff0c;特別適用于需要在多個任務中重用相同數…

Python爬蟲實戰:研究Haul庫相關技術構建電商數據采集與分析系統

1. 引言 1.1 研究背景與意義 隨著電子商務的迅速發展,電商平臺上的商品數據呈現爆炸式增長。這些數據蘊含著豐富的商業價值,如消費者行為分析、市場趨勢預測、競爭對手監測等。然而,如何從海量的電商數據中獲取有價值的信息,成為當前電商企業面臨的重要挑戰。 網絡爬蟲技…