微服务架构(六)-- Sentinel限流熔断

本文详细介绍了Sentinel在微服务架构中的应用,包括降级实践、热点规则分析、系统规则和授权规则。通过具体的步骤演示了如何设置降级规则应对慢调用和异常,分析了热点参数设计,并展示了系统负载、响应时间等关键指标的监控。同时,还阐述了Sentinel的授权规则,包括白名单和黑名单的配置方法。
摘要由CSDN通过智能技术生成

Sentinel降级应用实践

背景:慢调用(响应时间比较长)、经常抛出异常

准备工作

在ProviderController 类中添加doSentinel05方法,基于此方法演示慢调用过程下的限流

     //AtomicLong 类支持线程安全的自增自减操作
    private AtomicLong atomicLong=new AtomicLong(1);
    @GetMapping("/sentinel05")
    public  String doSentinel05() throws InterruptedException {
        //获取自增对象的值,然后再加1
        long num=atomicLong.getAndIncrement();
        if(num%2==0){//模拟50%的慢调用比例
           Thread.sleep(200);
        }
        return "sentinel 04 test";
    }

Sentinel降级入门

添加降级规则,进行测试

 

Sentinel热点规则分析

快速入门

第一步:在sca-provider中的ResourceBlockHandler类中添加异常处理方法

public static String doHandle(Integer id,BlockException ex){
    log.error("被限流了.....,{}",ex);
    return "访问太频繁了....";
}

第二步:在sca-provider中ResourceService类中添加基于id查询数据的业务方法

@SentinelResource(value="resource",
        blockHandlerClass = ResourceBlockHandler.class,
        blockHandler = "doHandle")
public String doGetResource(Integer id){
    //....
    return "the data's id is "+id;
}

 第三步:在sca-provider中的ProviderSentinelController中添加如下方法

        @GetMapping("/sentinel/sentinel06")
        public String doFindById(@RequestParam("id") Integer id){
            return resourceService.doGetResource(id);
        }

第四步:添加降级规则,进行测试

  

特定参数设计

 

 

Sentinel系统规则

快速入门

Load(负载)、RT(响应时间)、入口 QPS 、线程数和CPU使用率五个维度

在这里插入图片描述

Sentinel授权规则

快速入门

在这里插入图片描述

  • 流控应用:对应的黑名单/白名单中设置的规则值,多个值用逗号隔开.
  • 授权类型:白名单(允许访问),黑名单(不允许访问)

第一步:定义RequestOriginParser接口的实现类

package com.jt.provider.controller;

import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
@Component
public class DefaultRequestOriginParser implements RequestOriginParser {
    /**
     * 解析请求
     * @param request
     * @return
     */
    @Override
    public String parseOrigin(HttpServletRequest request) {
        //对请求参数解析 并返回参数
        //String origin = request.getParameter("origin");
        //return origin;
        //对请求头参数解析 并返回参数
//        String token = request.getHeader("token");
//        return token;
        String ip = request.getRemoteAddr();
        System.out.println("ip="+ ip);
             return ip;

    }
}

第二步:定义流控规则

 第三步:测试

在这里插入图片描述

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值