Springcloud sentinel安装和使用方法解析

作为阿里版的hystrix,sentinel简化了配置方式,提供了可视化界面网站和便捷的配置方式,更加贴合实际的使用方式,各种优点使得sentinel成为服务降级熔断流控等的最佳选择。

1.安装启用

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

官网选择合适的版本下载,其本体是jar文件。

java -jar sentinel-dashboard-1.7.2.jar

由于下载的安装包是jar,所以直接在cmd中启动即可。

登录地址默认是localhost:8080,账号密码都是sentinel,第一次进入界面会是空白,且只有访问过应用一遍,界面内才会出现对应的应用程序的信息。

2.配置应用项目连接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>
    <!--监控-->
    <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服务注册中心地址
    server-addr: localhost:8848
  sentinel:
   transport:
    #配置Sentin dashboard地址
    dashboard: localhost:8080
    # 默认8719端口,假如被占用了会自动从8719端口+1进行扫描,直到找到未被占用的 端口
    port: 8719
   datasource:  #配置流控规则持久化
    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)启动类常规配置

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

4)controller测试

@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 异常数");
    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.常规使用

1)流控规则

点击主页面的流控规则选择新增规则

资源名,自己要访问方法的地址

阈值类型,QPS指一秒内通过的访问量,线程数则是启用多少个线程来访问同一个资源。

单机阈值,例如写1,选QPS那么一秒内多于1次访问testA就会进行流量控制,强制报错,线程同理。

流控模式,直接则是遇到阈值就直接失败且默认,关联则是可以在一个资源上关联另一个资源,当资源访问量超过阈值就会强制停止另一个资源进行控制。

流控效果,快速失败是默认,warm up 是为了避免系统突然一段时间内进行了高并发的情况,对阈值进行限制,分为一段段的增长,最终达到阈值。排队等待即访问量过来根据规则一个个通过。

2)降级规则

区别于hystrix,sentinel通过网页可以配置三种降级策略。

RT:建议去查看官网,有明确的限定规则,即1秒内5次以上访问,且平均访问时间不得超过4900,如若超过以上限制就会进行降级处理。

异常比例:一定时间内错误达到一定比例就会触发降级。

异常数:一定时间内错误达到一定数就会触发降级。(以上配置需要严格遵守官网标准)

3.热点规则

热点规则是为了对方法中的某一个参数进行限流控制,可以精确到特定的参数,而且可以对指定的变量进行额外的控制。

热点规则只支持QPS,需要配合sentinelresource注解

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

blockhandler为热点限定的方法出现错误的时候兜底的另一个方法。避免出现错误时候使用的系统自带的页面,可以控制想要出现的信息。

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

4.系统规则

系统规则可以为整个应用加上层限制,最先进行判断,如果超过规定的阈值,就会触发降级规则,出现错误页面提示。

5.接口形式兜底方法。

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

hander接口

public class Myhander {
  public static CommonResult byhander1(BlockException exception){
    return new CommonResult(400,"访问失败了"+exception.getClass().getCanonicalName()+"这里是hander1");
  }
  public static CommonResult byhander2(BlockException exception){
    return new CommonResult(400,"访问失败了"+exception.getClass().getCanonicalName()+"这里是hander2");
  }
}

选择什么样的兜底方法,如果进行报错的话,就会选择对应的方法名称。

本篇所有代码均在GitHub:

https://github.com/MaTsukun/springcloud2020

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot基于Sentinel在服务上实现接口限流

    Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面. 在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数:或者按照某种规则进行限流,如限制ip的单位时间访问次数等. 之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善.来看一下sentinel的简介: https://github.com/spring-cloud-incubator/spring-cloud-alibab

  • Spring Cloud Alibaba整合Sentinel的实现步骤

    一.需求 实现一个简单的 整合 sentinel,不涉及sentinel的用法 二.实现步骤 1.下载 sentinel dashboard https://github.com/alibaba/Sentinel/releases 注意: 默认会启动8080端口,如果端口冲突,可以在启动命令上加入 -Dserver.port=新端口 默认用户名和密码[sentinel/sentinel] 启动控制台可用的配置项 2.服务提供者和消费者引入sentinel依赖 <dependency> <

  • Redis服务之高可用组件sentinel详解

    前文我们了解了redis的常用数据类型相关命令的使用和说明,回顾请参考https://www.jb51.net/article/120364.htm 今天我们来聊一下redis的高可用组件sentinel:首先来回顾下redis的主从同步,主从同步最主要的作用是让master的数据在其他服务器上实时存在副本,起到了备份的效果:对于redis的读写来说,主从架构能够让读的请求分散到多个从服务器上,从而降低了单台redis读请求的io压力,同时也提高了redis读请求的并发能力:通常为了数据的一致性

  • Spring sentinel哨兵模式相关原理解析

    1. sentinel作用 1. 当用Redis做主从方案时,假如master宕机,Redis本身无法自动进行主备切换 2. 而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换. 2. sentinel原理 1. sentinel负责持续监控主节点的健康,当主节挂掉时,自动选择一个最优的从节点切换成主节点 2. 从节点来连接集群时会首先连接sentinel,通过sentinel来查询主节点的地址 3. 当主节点

  • SpringBoot2.0+阿里巴巴Sentinel动态限流实战(附源码)

    Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentinel 具有以下特征: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围).消息削峰填谷.集群流量控制.实时熔断下游不可用应用等. 完备的实时监控:Sentinel 同时提供实时的监控功能.您可以在控制台中看到接入应用的

  • spring cloud gateway整合sentinel实现网关限流

    这篇文章主要介绍了spring cloud gateway整合sentinel实现网关限流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 说明: sentinel可以作为各微服务的限流,也可以作为gateway网关的限流组件. spring cloud gateway有限流功能,但此处用sentinel来作为替待. 说明:sentinel流控可以放在gateway网关端,也可以放在各微服务端. 1,以父工程为基础,创建子工程 2,添加pom依赖

  • Spring Cloud Alibaba使用Sentinel实现接口限流

    最近管点闲事浪费了不少时间,感谢网友 libinwalan 的留言提醒.及时纠正路线,继续跟大家一起学习Spring Cloud Alibaba. Nacos作为注册中心和配置中心的基础教程,到这里先告一段落,后续与其他结合的内容等讲到的时候再一起拿出来说,不然内容会有点跳跃.接下来我们就来一起学习一下Spring Cloud Alibaba下的另外一个重要组件:Sentinel. Sentinel是什么 Sentinel的官方标题是:分布式系统的流量防卫兵.从名字上来看,很容易就能猜到它是用来

  • springboot集成与使用Sentinel的方法

    前言 在上一篇中,我们初步了解了Sentinel的基本概念,以及其有关限流方面的基础理论,本篇将通过简单的与框架进行整合,看看Sentinel如何在实际项目中进行使用 控制台安装与部署 在实际的小微服务中,使用Sentinel做限流还有另一个强大的利器,就是其提供的dashboard,尽管我们可以通过编写Sentinel提供的一些API限流规则封装一些通用的方法,但是这对于很多初次接触Sentinel的同学来说,学习成本仍然不小,而提供的dashboard可以很方便的通过界面配置的方式达到上一篇

  • Redis Sentinel实现哨兵模式搭建小结

    Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置之后,这个"机器人"可以7*24小时工作,它能能够自动帮助你做一些事情,如监控,提醒,自动处理故障等. Redis-sentinel简介 Redis-sentinel是Redis的作者antirez,因为Redis集群的被各大公司使用,每个公司要写自己的集群管理工具,于是antirez花了几个星期写出了Redis-sentinel. Redis 的 Se

  • Springcloud sentinel安装和使用方法解析

    作为阿里版的hystrix,sentinel简化了配置方式,提供了可视化界面网站和便捷的配置方式,更加贴合实际的使用方式,各种优点使得sentinel成为服务降级熔断流控等的最佳选择. 1.安装启用 https://github.com/alibaba/Sentinel/releases 官网选择合适的版本下载,其本体是jar文件. java -jar sentinel-dashboard-1.7.2.jar 由于下载的安装包是jar,所以直接在cmd中启动即可. 登录地址默认是localhos

  • Elasticsearch py客户端库安装及使用方法解析

    一.介绍 elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库.为什么说它是一个low-level的客户端库呢?因为它只是对elasticsearch的rest API接口做了一层简单的封装,因此提供了最大的灵活性,但是于此同时使用起来就不是太方便.相对于这个low-level的客户端库,官方还提供了一个high-level的python客户端库:elasticsearch-dsl,这个会在另一篇文章中介绍. 更多介绍参见官方文档:

  • Jupyter Notebook安装及使用方法解析

    一.Jupyter Notebook是什么? 1.notebook jupyter简介 Jupyter Notebook是一个开源Web应用程序,允许您创建和共享包含实时代码,方程式,可视化效果和叙述文本的文档.用途包括:数据清理和转换,数值模拟,统计建模,数据可视化,机器学习等 Jupyter Notebook是一个交互式的笔记本,支持运行超过40种编程语言,Jupyter Notebook可以通过网页的形式打开,在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下面进行显示.

  • Vue router安装及使用方法解析

    对于单页应用,官方提供了vue-router进行路由跳转的处理,本篇主要也是基于其官方文档写作而成. 安装 基于传统,我更喜欢采用npm包的形式进行安装. npm install vue-router --save 当然,官方采用了多种方式进行安装,包括bower,cdn等. 基本用法 在HTML文档中使用,只需要利用v-link这个directive就行了,如: <a v-link="{path: '/view-a'}">Go to view-a</a> ps

  • 使用压缩的方式将Windows下的zip压缩包上传到Linux系统的方法解析

    我们可以使用在Windows下压缩文件夹,然后到Linux系统下解压缩的方式,完成整个上传工作. 第一步:在Windows系统下,将整个文件夹压缩成zip后缀的压缩包 方法一: 在文件夹xtemp上,右键,选中"发送到"--"压缩(zipped)文件夹" 即可完成zip格式文件夹的压缩 方法二: 在空白处,右键,选择"新建"--"WinRAR ZIP压缩文件" 然后将要压缩的内容,拖拽到压缩包里,即可 第二步:将压缩包xtem

  • win7 x64系统中安装Scrapy的方法

    scrapy是用python开发的爬虫框架,从网上查了安装方法,感觉都说的挺复杂,而且很多教程都很有年头了,于是记录了自己的安装过程. 首先安装python,地址:https://www.python.org/downloads/release/python-2710/,注意根据你的系统下64位(Windows x86-64 MSI installer)还是32位的(Windows x86 MSI installer). 现在是python3.6的天下了,建议大家安装python3版本. 装完以

  • php代码调试利器firephp安装与使用方法分析

    本文实例分析了php代码调试利器firephp安装与使用方法.分享给大家供大家参考,具体如下: firephp简述 如果你曾经写过js代码的话,那么你对如下的代码肯定不会陌生: console.log('something'); 通过这行代码,就可以在chome和firefox的开发工具(F12)的console栏中看到你想要的调试信息. 那么,php能不能也通过这种形式进行代码调试呢? 答案是肯定的,可以通过firephp工具来实现在浏览器的console栏中进行调试. firephp的安装

  • 编译安装redisd的方法示例详解

    安装方法: yum安装 查看yum仓库redis版本 [root@centos ~]# yum list redis Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Available Packages redis.x86_64 3.2.12-2.el7 myepel yum安装 [root@centos ~]# yum install redis -y 启动服务并设为开机启动

  • SpringCloud断路器Hystrix原理及用法解析

    这篇文章主要介绍了SpringCloud断路器Hystrix原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在分布式环境中,许多服务依赖项中的一些必然会失败.Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互.Hystrix通过隔离服务之间的访问点.停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性 两个比较重要的类 HystrixCommand HystrixObserv

  • Node.js 深度调试方法解析

    在 Node.js 项目开发过程中,随着项目的发展,调用关系越来越复杂,调试工具的重要性日益凸显. Node(v6.3+)集成了方便好用 V8 Inspect 调试器,允许我们通过 Chrome DevTools 进行图形化的调试和性能分析.同时,我们也可以使用 VS Code,Webstorm 等支持的编辑器对 Node.js 程序进行调试. Node Inspect 要想启动调试器,我们需要在启动 Node.js 应用程序时传入 --inspect 标志,也可以使用该标志提供自定义的端口,例

随机推荐