淺談如何在項(xiàng)目中使用Spring Cloud Alibaba Sentinel組件
Sentinel 是什么
隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 以流量為切入點(diǎn),從流量控制、熔斷降級、系統(tǒng)負(fù)載保護(hù)等多個維度保護(hù)服務(wù)的穩(wěn)定性。
官網(wǎng):https://github.com/alibaba/Sentinel
中文官網(wǎng):https://github.com/alibaba/Sentinel/wiki
Sentinel與Hystrix的區(qū)別
由于Hystrix不再積極的開發(fā),進(jìn)入維護(hù)階段,現(xiàn)在越來越多的開發(fā)者在項(xiàng)目中使用Spring Cloud Alibaba Sentinel組件。
Hystrix的關(guān)注點(diǎn)在于以 隔離和熔斷為主的容錯機(jī)制,超時或被熔斷的調(diào)用將會快速失敗,并可以提供 fallback 機(jī)制。
Sentinel的側(cè)重點(diǎn)在于:多樣化的流量控制、熔斷降級,系統(tǒng)負(fù)載保護(hù),實(shí)時監(jiān)控和控制臺。
對比詳圖

Sentinel的功能特點(diǎn)--摘自官方

Sentinel分為兩大部分:
核心庫(Java 客戶端)--自己的項(xiàng)目中的代碼。不依賴任何框架/庫,能夠運(yùn)行于 Java 7 及以上的版本的運(yùn)行時環(huán)境,同時對 Dubbo / Spring Cloud 等框架也有較好的支持。
控制臺(Dashboard)--控制臺主要負(fù)責(zé)管理推送規(guī)則、監(jiān)控、集群限流分配管理、機(jī)器發(fā)現(xiàn)等。
一、控制臺(Dashboard)
1、下載sentienl的jar包,本例使用:sentinel-dashboard-1.7.2.jar,地址:https://github.com/alibaba/Sentinel/releases
2、使用java -jar命令啟動Sentinel控制臺
啟動 Sentinel 控制臺需要 JDK 版本為 1.8 及以上版本。

3、訪問地址:http://localhost:8080/,8080為Sentinel的默認(rèn)端口 默認(rèn)賬號密碼為sentinel

二、搭建客戶端
1.在自己的項(xiàng)目中引入依賴
<!---sentinel的依賴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2.編輯項(xiàng)目中的 application.yml或者bootstrap.yml文件
添加Sentinel 控制臺配置信息
spring:
sentinel:
transport:
port: 8719 # 應(yīng)用與Sentinel控制臺交互的端口,應(yīng)用本地會起一個該端口占用的HttpServer # 默認(rèn)8719端口,假如端口被占用,依次+1,直到找到未被占用端口
dashboard: localhost:8080 #sentinel控制臺的請求地址,需要啟動一個dashboard的jar
3.資源是 Sentinel 中的一個關(guān)鍵概念。它可以是任何東西,例如服務(wù)、方法,甚至是代碼片段。
一旦被 Sentinel API 包裹,就被定義為資源,可以申請 Sentinel 提供的保護(hù)。
把需要控制流量的代碼用 Sentinel的關(guān)鍵代碼 SphU.entry("資源名") 和 entry.exit() 包圍起來即可。
實(shí)例代碼--摘自官方
Entry entry = null;
try {
// 定義一個sentinel保護(hù)的資源,名稱為test-sentinel-api
entry = SphU.entry(resourceName);
// 模擬執(zhí)行被保護(hù)的業(yè)務(wù)邏輯耗時
Thread.sleep(100);
return a;
} catch (BlockException e) {
// 如果被保護(hù)的資源被限流或者降級了,就會拋出BlockException
log.warn("資源被限流或降級了", e);
return "資源被限流或降級了";
} catch (InterruptedException e) {
return "發(fā)生InterruptedException";
} finally {
if (entry != null) {
entry.exit();
}
ContextUtil.exit();
}
}
使用注解@SentinelResource 用于定義資源,并提供可選的異常處理和 fallback 配置項(xiàng)
- value:資源名稱,必需項(xiàng)(不能為空)
- entryType:entry 類型,可選項(xiàng)(默認(rèn)為 EntryType.OUT)
- blockHandler / blockHandlerClass: blockHandler 對應(yīng)處理 BlockException 的函數(shù)名稱,可選項(xiàng)
- fallback:fallback 函數(shù)名稱,可選項(xiàng),用于在拋出異常的時候提供 fallback 處理邏輯。
在項(xiàng)目中Controller中添加@SentinelResource(value = "Sentinel-name")
例如:

啟動項(xiàng)目
三、查看接口的流量的詳情
1.實(shí)時監(jiān)控

2.簇點(diǎn)鏈路

3.等等:其他使用方法有待發(fā)掘
補(bǔ)充:
1.QPS:每秒請求數(shù),當(dāng)前調(diào)用該api的QPS到達(dá)閾值的時候進(jìn)行限流
2.線程數(shù):當(dāng)調(diào)用該api的線程數(shù)到達(dá)閾值的時候,進(jìn)行限流
3.直接:當(dāng)api大達(dá)到限流條件時,直接限流4
4.關(guān)聯(lián):當(dāng)關(guān)聯(lián)的資源到達(dá)閾值,就限流自己
5.鏈路:只記錄指定路上的流量,指定資源從入口資源進(jìn)來的流量,如果達(dá)到閾值,就進(jìn)行限流,api級別的限流
6.熱點(diǎn)規(guī)則即經(jīng)常訪問的數(shù)據(jù)。很多時候我們希望統(tǒng)計(jì)某個熱點(diǎn)數(shù)據(jù)中訪問頻次最高的 Top K 數(shù)據(jù),并對其訪問進(jìn)行限制。
7.響應(yīng)時間是指系統(tǒng)對請求作出響應(yīng)的時間。
8.吞吐量是指系統(tǒng)在單位時間內(nèi)處理請求的數(shù)量。
到此這篇關(guān)于淺談如何在項(xiàng)目中使用Spring Cloud Alibaba Sentinel組件的文章就介紹到這了,更多相關(guān)Spring Cloud Alibaba Sentinel組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring Cloud Alibaba之Sentinel實(shí)現(xiàn)熔斷限流功能
- Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例
- SpringCloud-Alibaba-Sentinel-配置持久化策略詳解
- SpringCloud-Alibaba-Sentinel服務(wù)降級,熱點(diǎn)限流,服務(wù)熔斷
- Spring Cloud Alibaba整合Sentinel的實(shí)現(xiàn)步驟
- Spring Cloud Alibaba教程之Sentinel的使用
- Spring Cloud Alibaba使用Sentinel實(shí)現(xiàn)接口限流
相關(guān)文章
解決因缺少Log4j依賴導(dǎo)致應(yīng)用啟動失敗的問題
日志是應(yīng)用軟件中不可缺少的部分,Apache的開源項(xiàng)目log4j是一個功能強(qiáng)大的日志組件,提供方便的日志記錄。但這篇文章不是介紹Log4j,這篇文章主要介紹了關(guān)于因缺少Log4j依賴導(dǎo)致應(yīng)用啟動失敗問題的相關(guān)資料,需要的朋友可以參考下。2017-04-04
MyBatis代碼自動生成器Mybatis-Generator的使用詳解
本文詳細(xì)介紹如何在SpringBoot項(xiàng)目中使用MyBatis-Generator進(jìn)行代碼生成,包括配置文件的添加、POM依賴配置、運(yùn)行配置等步驟,通過自動生成代碼,可以簡化MyBatis的繁瑣配置和SQL編寫,提高開發(fā)效率,注意要考慮MySQL版本兼容性,以及確保路徑配置正確2024-10-10
基于idea把springboot項(xiàng)目部署到docker
這篇文章主要介紹了基于idea把springboot項(xiàng)目部署到docker,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
IDEA2023常用配置指南(JDK/系統(tǒng)設(shè)置等常用配置)
idea很強(qiáng)大,但是初次安裝默認(rèn)的有很多設(shè)置并不是滿足我們開發(fā)的需要,下面這篇文章主要給大家介紹了關(guān)于IDEA2023常用配置(JDK/系統(tǒng)設(shè)置等常用配置)的相關(guān)資料,需要的朋友可以參考下2023-12-12
mybatis使用@mapkey獲取的結(jié)果的鍵(key)為null問題
這篇文章主要介紹了mybatis使用@mapkey獲取的結(jié)果的鍵(key)為null問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
JAVA JVM運(yùn)行時數(shù)據(jù)區(qū)詳解
這篇文章主要介紹了JVM運(yùn)行時數(shù)據(jù)區(qū)劃分原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-09-09
Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情
這篇文章主要介紹了Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情,BeanFactory?和?FactoryBean?的區(qū)別卻是一個很重要的知識點(diǎn),在本文中將結(jié)合源碼進(jìn)行分析講解,需要的小伙伴可以參考一下2022-05-05
關(guān)于SpringBoot創(chuàng)建存儲令牌的媒介類和過濾器的問題
這篇文章主要介紹了SpringBoot創(chuàng)建存儲令牌的媒介類和過濾器的問題,需要在配置文件中,添加JWT需要的密匙,過期時間和緩存過期時間,具體實(shí)例代碼參考下本文2021-09-09

