欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springcloud sentinel安裝和使用方法解析

 更新時(shí)間:2020年12月07日 08:40:26   作者:夢(mèng)澤千秋  
這篇文章主要介紹了Springcloud sentinel安裝和使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

作為阿里版的hystrix,sentinel簡(jiǎn)化了配置方式,提供了可視化界面網(wǎng)站和便捷的配置方式,更加貼合實(shí)際的使用方式,各種優(yōu)點(diǎn)使得sentinel成為服務(wù)降級(jí)熔斷流控等的最佳選擇。

1.安裝啟用

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

官網(wǎng)選擇合適的版本下載,其本體是jar文件。

java -jar sentinel-dashboard-1.7.2.jar

由于下載的安裝包是jar,所以直接在cmd中啟動(dòng)即可。

登錄地址默認(rèn)是localhost:8080,賬號(hào)密碼都是sentinel,第一次進(jìn)入界面會(huì)是空白,且只有訪問(wèn)過(guò)應(yīng)用一遍,界面內(nèi)才會(huì)出現(xiàn)對(duì)應(yīng)的應(yīng)用程序的信息。

2.配置應(yīng)用項(xiàng)目連接sentinel。

1)配置pom文件

<dependencies>
    <!-- SpringCloud ailibaba nacos-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- SpringCloud ailibaba sentinel-datasource-nacos 持久化需要用到-->
    <dependency>
      <groupId>com.alibaba.csp</groupId>
      <artifactId>sentinel-datasource-nacos</artifactId>
    </dependency>
    <!-- SpringCloud ailibaba sentinel-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <dependency>
      <groupId>com.bai</groupId>
      <artifactId>cloud-api-common</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--監(jiān)控-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--熱部署-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

2)配置yml

server:
 port: 8401

spring:
 application:
  name: cloudalibaba-sentinal-service
 cloud:
  nacos:
   discovery:
    #Nacos服務(wù)注冊(cè)中心地址
    server-addr: localhost:8848
  sentinel:
   transport:
    #配置Sentin dashboard地址
    dashboard: localhost:8080
    # 默認(rèn)8719端口,假如被占用了會(huì)自動(dòng)從8719端口+1進(jìn)行掃描,直到找到未被占用的 端口
    port: 8719
   datasource:  #配置流控規(guī)則持久化
    ds1:
     nacos:
      server-addr: localhost:8848
      dataId: cloudalibaba-sentinel-service
      groupId: DEFAULT_GROUP
      data-type: json
      rule-type: flow
management:
 endpoints:
  web:
   exposure:
    include: '*'

3)啟動(dòng)類常規(guī)配置

@SpringBootApplication
@EnableDiscoveryClient
public class SentinelMain8401 {
  public static void main(String[] args) {
    SpringApplication.run(SentinelMain8401.class,args);
  }
}

4)controller測(cè)試

@RestController
@Slf4j
public class FlowLimitController {

  @GetMapping(value = "/testA")
  public String testA(){
    return "******this is A";
  }
  @GetMapping(value = "/testB")
  public String testB(){
    log.info(Thread.currentThread().getName()+"\t"+"***testB");
    return "******this is B";
  }
  @GetMapping(value = "/testD")
  public String testD(){
    /* try {
      TimeUnit.SECONDS.sleep(1);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    log.info("this is testD RT");*/
    int a=10/0;
    log.info("this is testD 異常比例");
    return "!!!!!TESTD";
  }@GetMapping(value = "/testE")
  public String testE(){
    int a=10/0;
    log.info("this is testE 異常數(shù)");
    return "!!!!!TESTE";
  }

  @GetMapping(value = "/hotkey")
  @SentinelResource(value = "hotkey",blockHandler = "hotkeyhandler")
  public String hotkey(@RequestParam(value = "p1",required = false)String p1,
             @RequestParam(value = "p2",required = false)String p2){
    return ">>>>>>hotkey is ready";
  }
  public String hotkeyhandler(String p1, String p2, BlockException exception){
    return ".....hotkey is failed o(╥﹏╥)o";
  }

}

3.常規(guī)使用

1)流控規(guī)則

點(diǎn)擊主頁(yè)面的流控規(guī)則選擇新增規(guī)則

資源名,自己要訪問(wèn)方法的地址

閾值類型,QPS指一秒內(nèi)通過(guò)的訪問(wèn)量,線程數(shù)則是啟用多少個(gè)線程來(lái)訪問(wèn)同一個(gè)資源。

單機(jī)閾值,例如寫(xiě)1,選QPS那么一秒內(nèi)多于1次訪問(wèn)testA就會(huì)進(jìn)行流量控制,強(qiáng)制報(bào)錯(cuò),線程同理。

流控模式,直接則是遇到閾值就直接失敗且默認(rèn),關(guān)聯(lián)則是可以在一個(gè)資源上關(guān)聯(lián)另一個(gè)資源,當(dāng)資源訪問(wèn)量超過(guò)閾值就會(huì)強(qiáng)制停止另一個(gè)資源進(jìn)行控制。

流控效果,快速失敗是默認(rèn),warm up 是為了避免系統(tǒng)突然一段時(shí)間內(nèi)進(jìn)行了高并發(fā)的情況,對(duì)閾值進(jìn)行限制,分為一段段的增長(zhǎng),最終達(dá)到閾值。排隊(duì)等待即訪問(wèn)量過(guò)來(lái)根據(jù)規(guī)則一個(gè)個(gè)通過(guò)。

2)降級(jí)規(guī)則

區(qū)別于hystrix,sentinel通過(guò)網(wǎng)頁(yè)可以配置三種降級(jí)策略。

RT:建議去查看官網(wǎng),有明確的限定規(guī)則,即1秒內(nèi)5次以上訪問(wèn),且平均訪問(wèn)時(shí)間不得超過(guò)4900,如若超過(guò)以上限制就會(huì)進(jìn)行降級(jí)處理。

異常比例:一定時(shí)間內(nèi)錯(cuò)誤達(dá)到一定比例就會(huì)觸發(fā)降級(jí)。

異常數(shù):一定時(shí)間內(nèi)錯(cuò)誤達(dá)到一定數(shù)就會(huì)觸發(fā)降級(jí)。(以上配置需要嚴(yán)格遵守官網(wǎng)標(biāo)準(zhǔn))

3.熱點(diǎn)規(guī)則

熱點(diǎn)規(guī)則是為了對(duì)方法中的某一個(gè)參數(shù)進(jìn)行限流控制,可以精確到特定的參數(shù),而且可以對(duì)指定的變量進(jìn)行額外的控制。

熱點(diǎn)規(guī)則只支持QPS,需要配合sentinelresource注解

@SentinelResource(value = "hotkey",blockHandler = "hotkeyhandler")

blockhandler為熱點(diǎn)限定的方法出現(xiàn)錯(cuò)誤的時(shí)候兜底的另一個(gè)方法。避免出現(xiàn)錯(cuò)誤時(shí)候使用的系統(tǒng)自帶的頁(yè)面,可以控制想要出現(xiàn)的信息。

public String hotkeyhandler(String p1, String p2, BlockException exception){
    return ".....hotkey is failed o(╥﹏╥)o";
  }

4.系統(tǒng)規(guī)則

系統(tǒng)規(guī)則可以為整個(gè)應(yīng)用加上層限制,最先進(jìn)行判斷,如果超過(guò)規(guī)定的閾值,就會(huì)觸發(fā)降級(jí)規(guī)則,出現(xiàn)錯(cuò)誤頁(yè)面提示。

5.接口形式兜底方法。

@GetMapping(value = "/byhander")
  @SentinelResource(value = "byhander",blockHandlerClass = Myhander.class,blockHandler = "byhander1")
  public CommonResult byhander(){
    return new CommonResult(200,"成功訪問(wèn)到URL",new PayMent(21L,"999"));
  }

hander接口

public class Myhander {
  public static CommonResult byhander1(BlockException exception){
    return new CommonResult(400,"訪問(wèn)失敗了"+exception.getClass().getCanonicalName()+"這里是hander1");
  }
  public static CommonResult byhander2(BlockException exception){
    return new CommonResult(400,"訪問(wèn)失敗了"+exception.getClass().getCanonicalName()+"這里是hander2");
  }
}

選擇什么樣的兜底方法,如果進(jìn)行報(bào)錯(cuò)的話,就會(huì)選擇對(duì)應(yīng)的方法名稱。

本篇所有代碼均在GitHub:

https://github.com/MaTsukun/springcloud2020

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解Swift中的Substring和String

    深入理解Swift中的Substring和String

    這篇文章主要給大家深入的介紹了Swift中Substring和String的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Java 輕松實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)

    Java 輕松實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)

    在某些應(yīng)用場(chǎng)景中需要大量的二維數(shù)組來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),但是二維數(shù)組中卻有著大量的無(wú)用的位置占據(jù)著內(nèi)存空間,稀疏數(shù)組就是為了優(yōu)化二維數(shù)組,節(jié)省內(nèi)存空間
    2022-04-04
  • win7下安裝 JDK 基本流程

    win7下安裝 JDK 基本流程

    這篇文章主要介紹了win7下安裝 JDK 基本流程,需要的朋友可以參考下
    2014-05-05
  • Spring的@RequestParam對(duì)象綁定方式

    Spring的@RequestParam對(duì)象綁定方式

    這篇文章主要介紹了Spring的@RequestParam對(duì)象綁定方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java異常:java.net.UnknownHostException產(chǎn)生的原因和解決方案

    Java異常:java.net.UnknownHostException產(chǎn)生的原因和解決方案

    這篇文章主要給大家介紹了關(guān)于Java異常:java.net.UnknownHostException產(chǎn)生的原因和解決方案,這個(gè)異常是java.net包中的一部分,具體說(shuō)它是類的一個(gè)實(shí)例,異常通常是由主機(jī)名無(wú)法解析為IP地址引起的,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java?關(guān)鍵字break和continue的使用說(shuō)明

    Java?關(guān)鍵字break和continue的使用說(shuō)明

    這篇文章主要介紹了Java?關(guān)鍵字break和continue的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • 基于SpringBoot和Leaflet的行政區(qū)劃地圖掩膜效果實(shí)戰(zhàn)教程

    基于SpringBoot和Leaflet的行政區(qū)劃地圖掩膜效果實(shí)戰(zhàn)教程

    本文講解的是一種圖層級(jí)的掩膜,即使用行政區(qū)劃圖層來(lái)進(jìn)行掩膜,使用場(chǎng)景為,用戶只需要在地圖頁(yè)面中展示目標(biāo)行政區(qū)劃內(nèi)的影像信息,對(duì)于行政邊界外的影像,這篇文章主要介紹了基于SpringBoot和Leaflet的行政區(qū)劃地圖掩膜效果實(shí)戰(zhàn),需要的朋友可以參考下
    2024-05-05
  • Java多線程atomic包介紹及使用方法

    Java多線程atomic包介紹及使用方法

    這篇文章主要介紹了Java多線程atomic包介紹及使用方法,涉及原子更新基本類型介紹及代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • MyBatis實(shí)現(xiàn)留言板的示例代碼

    MyBatis實(shí)現(xiàn)留言板的示例代碼

    本文主要介紹了MyBatis實(shí)現(xiàn)留言板的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Java內(nèi)部類的全限定名規(guī)律代碼示例

    Java內(nèi)部類的全限定名規(guī)律代碼示例

    這篇文章主要介紹了Java內(nèi)部類的全限定名規(guī)律代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12

最新評(píng)論