SpringCloudAlibaba—Sentinel(限流)

前言:自己在学习过程的记录,借鉴别人文章,记录自己实现的步骤。
借鉴文章:https://blog.csdn.net/u014494148/article/details/105484410

Sentinel介绍

Sentinel诞生于阿里巴巴,其主要目标是流量控制和服务熔断。Sentinel是通过限制并发线程的数量(即信号隔离)来减少不稳定资源的影响,而不是使用线程池,省去了线程切换的性能开销。
当资源的响应时间变长时,线程将开始被占用。当线程数累积到一定数量时,新的传入请求将被拒绝。反之亦然,当资源恢复并变得稳定时,占用的线程也将被释放,新请求将被接受。
除了限制并发性外,Sentinel可以根据响应时间降级不稳定资源也是保证可靠性的有效方法。当资源的响应时间太大时,将在指定的时间窗口中拒绝所有对该资源的访问。-- 熔断机制

一、实现过程
1.下载sentinel-dashboard-1.6.0.jar 包
网盘分享链接:https://pan.baidu.com/s/1On073nCDJBpS2z4PvesR1Q 提取码:l5f1

2.输入下面命令,启动Sentinel

java -jar -Dserver.port=1111 sentinel-dashboard-1.6.0.jar


启动成功.png

3.访问http://localhost:1111 进入控制台,使用 sentinel/sentinel登录,进入控制台

控制台.png

4.user-server项目集成Sentinel
引入依赖


        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
        

bootstrap.yml加入配置

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:1111
yml配置.png

5.对资源进行限流 代码里面有注释解释@SentinelResource的使用。


详解.png
@RefreshScope  //刷新配置
@RestController
public class UserController {

    @Value("${server.port}")
    private String port;

    @Autowired
    private IUserService userService;

    /**
     * 限流降级 这里通过@SentinelResource的value属性为资源取名为 “user” ,后续我们可以根据该资源名来进行限流。
     * blockHandler指代限流降级方法,即当“user”资源触发限流了会调用blockHandler指向的降级方法返回拖地数据
     * 注意;降级方法要和被限流的方法参数,返回值要一致,然后加上 BlockException异常对象。
     * blockHandlerClass :指定限流的类  里面的限流方法需要static修饰
     * @param id
     * @return
     */
    @SentinelResource(value="user",blockHandler="exceptionHandler",blockHandlerClass = ExceptionUtil.class)
    @GetMapping("/user/{id}")
    public User getById(@PathVariable Long id){
        User id1 = userService.getOne(new QueryWrapper().eq("id", id));
        return id1;
    }

    /*//限流降级后返回
    public User exceptionHandler(@PathVariable Long id,BlockException ex){
        ex.printStackTrace();
        return new User();
    }*/
}

/**
 * 限流类
 * @author huangsong
 * @date 2021/7/16 10:53
 */
public class ExceptionUtil {
    //限流降级后返回
    public static User exceptionHandler(@PathVariable Long id, BlockException ex){
        ex.printStackTrace();
        User user = new User();
        user.setName("限流了");
        return user;
    }
}

6.先访问一次资源后,在Sentinel控制台有数据展示出来了,点击>>>>族点链路


族点链路.png

1.png
2.png

生成了流控规则,资源名对应客户端 @SentinelResource(value="user".. 注解的资源,通过QPS限流(每秒请求数量),阈值是 1 ,意思是“user”这个资源每秒只能有1个请求进来,多余的请求会触发限流,返回降级数据。

测试结果


测试结果.png

总结:还有很多种的流控模式,这里只是默认最简单的一种,如果大家有兴趣可以看我借鉴的文章,里面讲的很详细,我这里只做个自己学习的记录。

你可能感兴趣的:(SpringCloudAlibaba—Sentinel(限流))