SpringCloud 2020 Alibaba微服务实战七 sentinel实战之处理熔断

概念说明
消费者order-service需要先调用product-service获取具体的product,然后再处理其他的业务逻辑。但是这个product-service接口不是很稳定,经常抛出异常;或者是响应缓慢,导致order-service的响应变慢;如果置之不理,order-service可能会被product-service拖垮。这时候为了保护order-service,我们需要对product-service接口进行熔断。

总之:熔断是通过限制自己对外部系统的调用, 起到节约响应时间、维护链路稳定的作用。

熔断配置
Sentinel中的熔断降级有三个降级策略:

参考https://blog.csdn.net/liuerchong/article/details/114531301

RT(平均响应时间):
当资源的平均响应时间超过阈值之后,资源进入准降级状态。接下来如果持续进入 5 个请求,它们的 RT 都持续超过这个阈值,那么在接下的时间窗口之内,对这个方法的调用都会自动抛出 DegradeException 异常。在下一个时间窗口到来时, 会接着再放入5个请求, 再重复上面的判断.

异常比例
当资源的每秒异常总数占通过量的比值超过阈值之后,资源进入降级状态,即在接下的时间窗口之内,对这个方法的调用都会自动地抛出DegradeException异常。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

异常数
当资源近 1 分钟的异常数目超过阈值之后会进行熔断。

首先我们对原接口进行改造,让其直接抛出Runtimeexception:

@GetMapping(value = "/hello")
@SentinelResource(value = "hello",fallback = "fallbackHandler")
public String hello() {
        i++; 
   //异常比例为0.667 
    if (i % 3 != 0) {
       throw new RuntimeException(); 
     }
    return "Hello Sentinel";
}
@GetMapping(value = "/hello")
    @SentinelResource(value = "hello",fallback = "fallbackHandler")
    public String hello() {
        log.info("****hello-hello-hello-hello-hello");
         i++; 
       //异常比例为0.667 
        if (i % 3 != 0) {
           throw new RuntimeException(); 
​​​​​​​         }
        return "Hello Sentinel";
    }
    /**
     * 自定义熔断异常
     * 返回值和参数要跟目标函数一样
     */
    public String fallbackHandler(){
        return ResultData.fail(500,"服务被熔断了,不要调用!");
    }

设置如下的熔断规则

如果hello的异常率超过50%,那么接下来5秒内直接触发熔断降级,默认情况会抛出DegradeException异常 

 

 

持久化配置

  • 引入sentinel-datasource-nacos组件,跟限流一样配置即可

在nacos中建立配置文件sentinel-service-sentinel,做如下配置

[
    {
    "resource": "hello",
    "count": 0.5,
    "grade": 1,
    "passCount": 0,
    "timeWindow": 5
  }
]

可以看到上面配置规则是一个数组类型,数组中的每个对象是针对每一个保护资源的配置对象,每个对象中的属性解释如下:

  1. resource:资源名,即降级规则的作用对象
  2. count:阈值
  3. grade:降级模式 0:RT 1:异常比例 2:异常数
  4. timeWindow:时间窗口(单位秒)
  • 进入sentinel查看dashboard,发现sentinel自动获取nacos的配置
     
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值