sentinel限流来吩、熔斷降級(jí) (2022-04-18)

一、sentinel控制臺(tái)安裝

1.下載控制臺(tái)jar包: wget https://github.com/alibaba/Sentinel/releases/download/1.8.3/sentinel-dashboard-1.8.3.jar
2.啟動(dòng)sentinel控制臺(tái)Dashboard
注意:?jiǎn)?dòng) Sentinel 控制臺(tái)需要 JDK 版本為 1.8 及以上版本了讨。
啟動(dòng)命令:nohup java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.3.jar 2>&1 &
3.訪問(wèn)sentinel dashboard
瀏覽器訪問(wèn):http://192.168.0.124:8080/#/login
默認(rèn)用戶密碼為:sentinel

image.png

二内颗、客戶端接入控制臺(tái)

1.springboot項(xiàng)目pom.xml文件中加入依賴

       <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.7.RELEASE</version>
       </dependency>
      <!--springcloud gateway添加次依賴 -->
       <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
            <version>1.8.1</version>
        </dependency>
        <!--dubbo服務(wù)添加次依賴 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-apache-dubbo-adapter</artifactId>
            <version>1.8.1</version>
        </dependency>

2.application.yml配置文件中添加sentinel配置

spring:
    cloud:
        sentinel:
            transport:
                 dashboard: 192.168.0.124:8080

3.查看控制臺(tái)


image.png

三.規(guī)則設(shè)置

sentinel規(guī)則配置方式有兩種:
1.通過(guò) API 直接修改 (loadRules)

FlowRuleManager.loadRules(List<FlowRule> rules); // 修改流控規(guī)則
DegradeRuleManager.loadRules(List<DegradeRule> rules); // 修改降級(jí)規(guī)則

手動(dòng)修改規(guī)則(硬編碼方式)一般僅用于測(cè)試和演示钧排,生產(chǎn)上一般通過(guò)動(dòng)態(tài)規(guī)則源的方式來(lái)動(dòng)態(tài)管理規(guī)則。

2.通過(guò) DataSource 適配不同數(shù)據(jù)源修改

根據(jù)官方說(shuō)明:
上述 loadRules() 方法只接受內(nèi)存態(tài)的規(guī)則對(duì)象均澳,但更多時(shí)候規(guī)則存儲(chǔ)在文件恨溜、數(shù)據(jù)庫(kù)或者配置中心當(dāng)中符衔。DataSource 接口給我們提供了對(duì)接任意配置源的能力。相比直接通過(guò) API 修改規(guī)則糟袁,實(shí)現(xiàn) DataSource 接口是更加可靠的做法判族。

我們推薦通過(guò)控制臺(tái)設(shè)置規(guī)則后將規(guī)則推送到統(tǒng)一的規(guī)則中心,客戶端實(shí)現(xiàn) ReadableDataSource 接口端監(jiān)聽(tīng)規(guī)則中心實(shí)時(shí)獲取變更项戴,流程如下:

image.png

DataSource 擴(kuò)展常見(jiàn)的實(shí)現(xiàn)方式有:

  • 拉模式:客戶端主動(dòng)向某個(gè)規(guī)則管理中心定期輪詢拉取規(guī)則形帮,這個(gè)規(guī)則中心可以是 RDBMS、文件周叮,甚至是 VCS 等辩撑。這樣做的方式是簡(jiǎn)單,缺點(diǎn)是無(wú)法及時(shí)獲取變更仿耽;
  • 推模式:規(guī)則中心統(tǒng)一推送合冀,客戶端通過(guò)注冊(cè)監(jiān)聽(tīng)器的方式時(shí)刻監(jiān)聽(tīng)變化,比如使用 Nacos氓仲、Zookeeper 等配置中心。這種方式有更好的實(shí)時(shí)性和一致性保證得糜。

Sentinel 目前支持以下數(shù)據(jù)源擴(kuò)展:

生產(chǎn)環(huán)境需使用push模式

pom添加依賴

<dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-zookeeper</artifactId>
</dependency>

客戶端添加配置

@Configuration
public class ZookeeperSentinelConfiguration {
    private final Logger logger = LoggerFactory.getLogger(getClass());
    @Value("${spring.application.name:wcyq-payment-manager-web}")
    private String appName;
    @Value("${spring.cloud.zookeeper.connect-string}")
    private String connectString;
    private final String RULE_ROOT_PATH = "/sentinel_rule_config";


    /**
     * 加載sentinel規(guī)則
     */
    @PostConstruct
    public void loadRules() {
        logger.info("加載sentinel流控規(guī)則數(shù)據(jù)加載");
        ReadableDataSource<String, List<FlowRule>> flowRuleDataSource = new ZookeeperDataSource<>(connectString,
                RULE_ROOT_PATH + "/" +appName + "/flow", rules -> JSON.parseObject(rules, new TypeReference<List<FlowRule>>(){}));
        FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
        logger.info("加載sentinel降級(jí)規(guī)則數(shù)據(jù)加載");
        ReadableDataSource<String, List<DegradeRule>> deGradeRuleDataSource = new ZookeeperDataSource<>(connectString,
                RULE_ROOT_PATH + "/" + appName + "/degrade", rules -> JSON.parseObject(rules, new TypeReference<List<DegradeRule>>(){}));
        DegradeRuleManager.register2Property(deGradeRuleDataSource.getProperty());
        logger.info("加載sentinel訪問(wèn)控制規(guī)則數(shù)據(jù)加載");
        ReadableDataSource<String, List<AuthorityRule>> authorityRuleDataSource = new ZookeeperDataSource<>(connectString,
                RULE_ROOT_PATH + "/" + appName + "/authority", rules -> JSON.parseObject(rules, new TypeReference<List<AuthorityRule>>(){}));
        AuthorityRuleManager.register2Property(authorityRuleDataSource.getProperty());
        logger.info("加載sentinel熱點(diǎn)參數(shù)限流規(guī)則數(shù)據(jù)加載");
        ReadableDataSource<String, List<ParamFlowRule>> paramFlowRuleDataSource = new ZookeeperDataSource<>(connectString,
                RULE_ROOT_PATH + "/" + appName + "/param", rules -> JSON.parseObject(rules, new TypeReference<List<ParamFlowRule>>(){}));
        ParamFlowRuleManager.register2Property(paramFlowRuleDataSource.getProperty());
        logger.info("加載sentinel系統(tǒng)保護(hù)限流規(guī)則數(shù)據(jù)加載");
        ReadableDataSource<String, List<SystemRule>> systemRuleDataSource = new ZookeeperDataSource<>(connectString,
                RULE_ROOT_PATH + "/" + appName + "/system", rules -> JSON.parseObject(rules, new TypeReference<List<SystemRule>>(){}));
        SystemRuleManager.register2Property(systemRuleDataSource.getProperty());
    }

   #dubbo服務(wù)添加統(tǒng)一降級(jí)
   /**
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(ManagerWebApplication.class, args);
        // 定義dubbo全局fallback
        DubboAdapterGlobalConfig.setConsumerFallback((invoker, invocation, e) -> {
            logger.error("dubbo服務(wù)調(diào)用觸發(fā)降級(jí),參數(shù):{}, 服務(wù)名:{}, 方法:{}", invocation.getArguments(), invocation.getServiceName(), invocation.getMethodName());
            return AsyncRpcResult.newDefaultAsyncResult(Result.builder()
                    .setCode(StatusCodeEnum.CODE_00100031.getCode())
                    .setMsg("當(dāng)前系統(tǒng)服務(wù)繁忙,請(qǐng)稍后再試!"), invocation);
        });
    }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朝抖,一起剝皮案震驚了整個(gè)濱河市啥箭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌治宣,老刑警劉巖急侥,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異侮邀,居然都是意外死亡坏怪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門绊茧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)铝宵,“玉大人,你說(shuō)我怎么就攤上這事华畏∨羟铮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵亡笑,是天一觀的道長(zhǎng)侣夷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)仑乌,這世上最難降的妖魔是什么百拓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任琴锭,我火速辦了婚禮,結(jié)果婚禮上耐版,老公的妹妹穿的比我還像新娘祠够。我一直安慰自己,他們只是感情好粪牲,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布古瓤。 她就那樣靜靜地躺著,像睡著了一般腺阳。 火紅的嫁衣襯著肌膚如雪落君。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天亭引,我揣著相機(jī)與錄音绎速,去河邊找鬼。 笑死焙蚓,一個(gè)胖子當(dāng)著我的面吹牛纹冤,可吹牛的內(nèi)容都是我干的购公。 我是一名探鬼主播萌京,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宏浩!你這毒婦竟也來(lái)了知残?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤比庄,失蹤者是張志新(化名)和其女友劉穎求妹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體佳窑,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡制恍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了神凑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吧趣。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖耙厚,靈堂內(nèi)的尸體忽然破棺而出强挫,到底是詐尸還是另有隱情,我是刑警寧澤薛躬,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布俯渤,位于F島的核電站,受9級(jí)特大地震影響型宝,放射性物質(zhì)發(fā)生泄漏八匠。R本人自食惡果不足惜絮爷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梨树。 院中可真熱鬧坑夯,春花似錦、人聲如沸抡四。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)指巡。三九已至淑履,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藻雪,已是汗流浹背秘噪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勉耀,地道東北人指煎。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像便斥,于是被迫代替她去往敵國(guó)和親至壤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容