spring cloud alibaba系列sentinel

“满大街的人格残疾顶着恋爱之名寻求心理救赎,误把求救当爱情,误把索取当成长,其实你从未见过爱情”


之前的微服务熔断我们需要使用hystrix,我们知道虽然能用,但是Netflix已经不再进行维护了,所有我们需要寻找新的替代的工具,所以alibaba的Sentinel便成了首选
Sentinel: 分布式系统的流量防卫兵
这是官网的介绍
https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
详细文档请看官方文档,我叭叭半天你还不一定懂

Sentinel主要功能

  • 熔断:。。。
  • 限流:提供非常细度的限流规则
  • 监控:。。。

搭建

  • 引依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
  • 添加配置
spring:
  application:
    name: gmsj-customer
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: ${settings.nacos.addr}
        namespace: ${settings.nacos.namespace.${spring.profiles.active}}
        file-extension: yaml
        shared-configs: shareConfig.yaml
        refresh-enabled: true
#        extension-configs:
#          dataId:
#          group:
#          refresh: true

      discovery:
        server-addr: ${settings.nacos.addr}
        namespace: ${settings.nacos.namespace.${spring.profiles.active}}
    sentinel:
      transport:
        dashboard: ${settings.sentinel.dashboard}
feign:
  sentinel:
    enabled: true
##### nacos配置参数   ####
settings:
  nacos:
    addr: 192.168.31.37:38001
    namespace:
      dev: 190bfcff-e39e-42d7-ae87-af2690a4d409
  sentinel:
    dashboard: 192.168.31.37:8808

主要添加了Sentinel的控制台的配置,如果你不需要可以不要添加

Dashobard搭建

需要下载jar然后自行部署,这点感觉不太方便,个人觉得还是自己下载源码,docker部署比较好,这是spring boot项目,和正常服务一样部署就行,不管是修改配置还是管理项目,都比运行一个jar包强的多吧
https://github.com/alibaba/Sentinel/releases
我比较懒,直接部署jar包

java -jar sentinel-dashboard-1.7.2.jar
  • 默认启动端口是8080,用户名和密码都是sentinel
    可以通过
    • –server.port=8088,指定端口
    • –auth.username=sentinel
    • –auth.password=123456
      具体怎么修改可以查看源码的配置文件
      在这里插入图片描述
      为了方便,我是在windows上启动的
 java -jar .\sentinel-dashboard-1.7.2.jar --server.port=8808 --auth.username=meng --auth.password=123456

启动成功后打开ip:端口即可访问控制台
在这里插入图片描述

  • 定义资源
@Service
public class CustomerServiceImpl implements CustomerService {

    @Override
    @SentinelResource(value = "hello", blockHandler = "helloException", fallback = "helloFallback")
    public String hello(String msg) {
//        throw new RuntimeException("异常发生了");
        return "hello" + msg;
    }

    public String helloException(String msg, BlockException ble){
        return msg + " 异常:" + ble.getMessage();
    }

    public String helloFallback(String msg){
        return msg + "  fallback";
    }
}

资源的定义方式有多种,这里采用注解的方式,不入侵源代码
所有方式:https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8
通过@SentinelResource定义了一个资源,value表示资源的名称,标识该接口

  • value:资源名称,必需项(不能为空)
  • entryType:entry 类型,可选项(默认为 EntryType.OUT)
  • blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
    fallback / fallbackClass:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。fallback 函数签名和位置要求:
    返回值类型必须与原函数返回值类型一致;
    方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
  • fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
  • defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。defaultFallback 函数签名要求:
    返回值类型必须与原函数返回值类型一致;
    方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
    defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
  • exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。
  • 官方文档:https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81

然后在控制台配置该接口的限流,第一次需要先调一次接口,然后在sentinel控制台即可看见该资源的信息
在这里插入图片描述
然后我们可以给资源添加各种限制
在簇点链路对应的资源名称,添加一个流控,对接口限流,也可以直接在流控规则菜单中直接添加
在这里插入图片描述
使用QPS,设置单机阈值为2,每秒最多请求两次,快速请求接口
在这里插入图片描述
可以看见返回了我在@SentinelResource中定义的blockHandler 返回信息
降级设置和流控类似,然后规则的定义在上面给出的官方文档里面都有,
还有热点限流,就是资源的指定参数访问限制
在这里插入图片描述
该资源一秒只能调两次,否者就会抛出我们刚刚定义的错误
然后在热点规则中编辑我们刚刚配置的规则,展开高级选项,配置指定参数值的限流阈值
在这里插入图片描述
第一个参数的参数值为mm的1秒只能请求一次。
然后还有授权就不用讲了,你点开一看就明白,还有系统规则里面可以新增系统规则保护服务器,需要的话可以了解一下。
大概规则就这些,后面有问题我还会持续更新,有问题也请指出
以上只是我们的一个简单测试,并不适合在生产环境使用,
在控制台配置,界面化的操作是比较方便,但是我们如果重启,我们配置的规则就丢失了,所以我们需要对我们配置的规则进行持久化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值