真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringCloud中如何使用Sentinel哨兵組件

這篇文章給大家介紹SpringCloud中如何使用Sentinel哨兵組件,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

為塔城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及塔城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、塔城網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

1、概念描述

Sentinel 以流量為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性。包括核心的獨(dú)立類庫,監(jiān)控臺(tái),豐富的使用場景驗(yàn)證。(這似乎是阿里開源組件的一貫作風(fēng),極其有特點(diǎn),且特點(diǎn)很規(guī)律)

基本特性圖:

SpringCloud中如何使用Sentinel哨兵組件

補(bǔ)刀一句:這種圖很多人可能不在意,但是一般官方給這個(gè)圖就是該中間件的基本使用思路,與核心功能點(diǎn)。

2、基礎(chǔ)性概念

  • 資源管理

資源是Sentinel組件中的核心概念之一。應(yīng)用服務(wù)器上腳本,靜態(tài)頁面,API接口,文件圖片等都可以理解為資源,對(duì)于Java開發(fā)者而言,API接口就是這里資源的概念。

  • 規(guī)則配置

Sentinel組件通過流控規(guī)則的配置,來指定允許該資源(API接口)通過的請(qǐng)求次數(shù),IP黑白名單,應(yīng)用服務(wù)等。

  • 測試效果

QPS:每秒查詢率,是一臺(tái)服務(wù)器每秒能夠處理的查詢次數(shù)。

TPS:每秒處理事務(wù)數(shù),事務(wù)處理整體傾向于整個(gè)過程。

二、框架環(huán)境整合

這里的環(huán)境主要整合Nacos注冊(cè)中心,F(xiàn)eign服務(wù),Sentinel哨兵,和Sentinel控制臺(tái)。

1、基本依賴

這里的依賴需要參考官方文檔,不同的環(huán)境使用不同的依賴,這里主要適配SpringCloud環(huán)境,所以使用如下包即可。


    com.alibaba.cloud
    spring-cloud-starter-alibaba-sentinel
    2.1.1.RELEASE

2、控制臺(tái)面板

這里直接從GitHub下載一個(gè)控制臺(tái)服務(wù)包即可,也可以自己下載源碼,按照需求修改后自行打包。

java -jar sentinel-dashboard-1.7.1.jar

下載并啟動(dòng)控制臺(tái)服務(wù)。

3、服務(wù)配置

這里主要是把用到的兩個(gè)服務(wù)9001和9002連接到監(jiān)控臺(tái)。

spring:
  application:
    name: node09-nacos-9001
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
    sentinel:
      transport:
        port: 9001
        dashboard: localhost:8080

最下面四行文件是哨兵控制臺(tái)的主要配置,注意剛啟動(dòng)之后控制臺(tái)是看不到連接的,有資源被觸發(fā)之后才能看到。(附一張首頁效果圖)

SpringCloud中如何使用Sentinel哨兵組件

三、流量控制

1、基本描述

流量控制(flow control),其原理是監(jiān)控應(yīng)用流量的 QPS 或并發(fā)線程數(shù)等指標(biāo),當(dāng)達(dá)到指定的閾值時(shí)對(duì)流量進(jìn)行控制,以避免被瞬時(shí)的流量高峰沖垮,從而保障應(yīng)用的高可用性。

2、限流規(guī)則

限流規(guī)則主要由下面幾個(gè)因素組成。

  • resource:資源名,即限流規(guī)則的作用對(duì)象,對(duì)于Java服務(wù)端開發(fā)而言就是執(zhí)行的方法;

  • count: 限流閾值,單位時(shí)間內(nèi)能按照規(guī)則通過的請(qǐng)求量;

  • grade: 限流閾值類型,QPS 或并發(fā)線程數(shù) ;

  • limitApp: 流控限制的指定應(yīng)用來源,若為default則不區(qū)分調(diào)用來源;

  • strategy: 調(diào)用關(guān)系限流策略,直連,鏈路等;

  • controlBehavior: 流量控制效果,直接拒絕、Warm Up、勻速排隊(duì);

3、基本案例

  • 硬編碼

配置規(guī)則

public class FlowRuleConfig {
    public static void initFlowQpsRule(String resourceName) {
        List rules = new ArrayList<>();
        FlowRule rule = new FlowRule(resourceName);
        // 修改這里參數(shù),查看效果
        rule.setCount(100);
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        rule.setLimitApp("default");
        rules.add(rule);
        FlowRuleManager.loadRules(rules);
    }
}

該規(guī)則參考上面的限流因素,不難理解。

使用方式

@RequestMapping(value = "/web/getOrder",method = RequestMethod.GET)
public String getOrder (@RequestParam("id") Integer id){
    FlowRuleConfig.initFlowQpsRule("getOrder");
    Entry entry = null;
    try {
        // 定義資源,埋點(diǎn)
        entry = SphU.entry("getOrder");
        // 保護(hù)的業(yè)務(wù)邏輯
        return "Order=" + id ;
    } catch (Exception e){
        e.printStackTrace();
    } finally {
        if (entry != null){entry.exit();}
    }
    return "Order Error" ;
}

測試的時(shí)候修改規(guī)則中count值,測試效果明顯。

  • 編碼簡化

SphU.entry中可以設(shè)置處理類型,限流閾值。

@RequestMapping(value = "/web/getState",method = RequestMethod.GET)
public String getState (@RequestParam("id") Integer id){
    Entry entry = null;
    try {
        entry = SphU.entry("getOrder",EntryType.IN,2);
        return "state=" + id;
    }
    catch (BlockException e){
        e.printStackTrace();
    } finally {
        if (entry != null){entry.exit();}
    }
    return "State Error" ;
}

不過這種模式依舊是代碼入侵嚴(yán)重,不太符合現(xiàn)在編程的大趨勢。Sentinel支持通過 @SentinelResource注解定義資源并配置。

4、測試效果

請(qǐng)求上述的兩個(gè)測試接口,之后看控制臺(tái)中9001服務(wù)的簇點(diǎn)鏈路。

SpringCloud中如何使用Sentinel哨兵組件

可以基于控制臺(tái)實(shí)時(shí)配置資源的:流控、降級(jí)、熱點(diǎn)、授權(quán)等核心功能,服務(wù)重啟之后配置也會(huì)重置。

四、服務(wù)熔斷降級(jí)

1、注解詳解

核心注解SentinelResource

用于定義資源,并提供可選的異常處理和 fallback 配置項(xiàng)。 @SentinelResource 注解包含以下屬性:

  • value

資源名稱,核心概念不能為空;

  • entryType

entry 類型,可選項(xiàng)默認(rèn)為 EntryType.OUT;

  • blockHandler

對(duì)應(yīng)處理BlockException的函數(shù)名稱,可選項(xiàng)。blockHandler函數(shù)訪問范圍需要是public,返回類型需要與原方法相匹配,參數(shù)類型需要和原方法相匹配并且最后加一個(gè)額外的參數(shù),類型為BlockException。blockHandler函數(shù)默認(rèn)需要和原方法在同一個(gè)類中。若希望使用其他類的函數(shù),則可以指定 blockHandlerClass為對(duì)應(yīng)的類的Class對(duì)象,注意對(duì)應(yīng)的函數(shù)必須為 static 函數(shù),否則無法解析。

  • fallback

fallback函數(shù)名稱,可選項(xiàng),用于在拋出異常的時(shí)候提供fallback處理邏輯。fallback函數(shù)可以針對(duì)所有類型的異常(除了 exceptionsToIgnore里面排除掉的異常類型)進(jìn)行處理。fallback 函數(shù)簽名和位置要求:返回值類型必須與原函數(shù)返回值類型一致;方法參數(shù)列表需要和原函數(shù)一致,或者可以額外多一個(gè);

注意:這里可以這樣理解blockHandler和fallback,fallback處理業(yè)務(wù)邏輯的異常,服務(wù)降級(jí),blockHandler處理sentinel組件控制的阻斷異常。

2、使用案例

9001接口服務(wù)

@Service
public class FlowServiceImpl implements FlowService {
    @Resource
    private JdbcTemplate jdbcTemplate ;
    @SentinelResource(value = "getPhone",blockHandler = "exceptionHandler", fallback = "fallback")
    @Override
    public String getPhone(Integer id) {
        String sql = "select phone from d_phone WHERE id="+id ;
        Integer.parseInt("hand") ;
        return jdbcTemplate.queryForList(sql,String.class).get(0) ;
    }
    // 降級(jí)處理
    public String fallback(Integer id) {
        return "服務(wù)降級(jí),id="+id ;
    }
    // 異常處理
    public String exceptionHandler(Integer id,BlockException be) {
        be.printStackTrace();
        return "服務(wù)拋異常,id="+id ;
    }
}

9002請(qǐng)求服務(wù)

@RequestMapping(value = "/web/getJdbc",method = RequestMethod.GET)
public String getJdbc () {
    return msgFeign.getJdbc() ;
}

3、效果測試

通過控制臺(tái)配置9001的限流規(guī)則,然后刷接口看效果。

SpringCloud中如何使用Sentinel哨兵組件

注意阻斷異常和業(yè)務(wù)異常的返參區(qū)別。

4、對(duì)比Hystrix組件

Hystrix的核心點(diǎn)在于以隔離和熔斷為主的容錯(cuò)機(jī)制,超時(shí)或被熔斷的調(diào)用將會(huì)快速失敗,并可以提供 fallback 機(jī)制;

Sentinel核心點(diǎn)在于流量控制多樣化,熔斷降級(jí)服務(wù),系統(tǒng)負(fù)載保護(hù),實(shí)時(shí)監(jiān)控和控制臺(tái);

補(bǔ)刀一句:對(duì)于流量控制類的組件,大部分場景是使用限流,服務(wù)降級(jí)這兩塊核心功能。

關(guān)于SpringCloud中如何使用Sentinel哨兵組件就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


分享標(biāo)題:SpringCloud中如何使用Sentinel哨兵組件
分享路徑:http://weahome.cn/article/ipoidh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部