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

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限流熔断_第1张图片

 微服务架构(六)-- Sentinel限流熔断_第2张图片

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限流熔断_第3张图片

微服务架构(六)-- Sentinel限流熔断_第4张图片  微服务架构(六)-- Sentinel限流熔断_第5张图片

特定参数设计

微服务架构(六)-- Sentinel限流熔断_第6张图片

微服务架构(六)-- Sentinel限流熔断_第7张图片

 

微服务架构(六)-- Sentinel限流熔断_第8张图片 

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;

    }
}

第二步:定义流控规则

微服务架构(六)-- Sentinel限流熔断_第9张图片

 第三步:测试

微服务架构(六)-- Sentinel限流熔断_第10张图片

 

微服务架构(六)-- Sentinel限流熔断_第11张图片

微服务架构(六)-- Sentinel限流熔断_第12张图片 

 

 

你可能感兴趣的:(微服务,微服务,架构,java)