【Sentinel的限流使用】⭐️SpringBoot整合Sentinel实现Api的限流

发布于:2024-04-09 ⋅ 阅读:(138) ⋅ 点赞:(0)

目录

前言

一、Sentinel下载

 二、SpringBoot 整合 Sentinel

三、流控规则

章末


前言

        小伙伴们大家好,上次使用OpenFeign时用到了 Hystrix实现熔断和限流的功能,但是发现该工具已经停止维护了,于是想到了Spring Cloud Alibaba开发的Sentinel工具,也可以实现流量控制,熔断降级,系统负载保护等

一、Sentinel下载

        项目地址:Releases · alibaba/Sentinel · GitHub

1.直接下载 jar 包,到文件下载目录层级打开命令页面

 2.使用 java -jar sentinel-dashboard-1.8.7.jar 启动sentinel 

注:sentinel默认启动使用的是 8080 端口,如果担心被占用可以指定端口号

java -jar sentinel-dashboard-1.8.7.jar --server.port=8333

3.访问管理页面

         访问 http://localhost:8333/#/login ,进到登陆页面,默认登陆用户密码都是sentinel

 二、SpringBoot 整合 Sentinel

2.1 引入依赖

        我这里制定了版本,因为用的父依赖中没有引用

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>

2.2 配置信息 

spring:
    ...
  cloud:
      sentinel:
        transport:
          #控制台地址配置
          dashboard: localhost:8333
          #传输端口
          port: 8719

#暴露所有的端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

2.3 启动类开启服务发现

        在启动类上加 @EnableDiscoveryClient 注解,打开服务发现功能

2.4 测试接口加注解@SentinelResource

    @SentinelResource
    @PostMapping(value = "/login")
    public BaseResult login(String username, String password) {
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        ...
        return BaseResult.success();
    }

2.5 启动项目

        注:本地启动项目连接控制台后,发现看不到服务,可能是因为 Sentinel 本身懒加载的原因,就是说服务不被调用,sentinel 控制台是无法感知到服务的,需要手动调用一次接口刷新

        检测到服务后的界面如下:

      

三、流控规则

        3.1 基本介绍

资源名:唯一名称,默认的请求路径

针对来源:Sentinel 可以针对调用者进行限流,填写微服务名称,默认是default也就是不区分来源

阈值类型/单机阈值:

        1.QPS 每秒钟的请求数量 : 当调用该api接口的QPS到达阈值时,启动限流

        2.线程数:当调用该api的线程数达到阈值的时候,进行限流

是否集群:不需要集群

流控模式:挑默认的看下

        1.直接: api达到限流条件时,直接限流

流控效果: 

        1.快速失败 : 直接失败,抛出异常

        3.2 添加一个流控规则,限制单机阈值 QPS 为1

         3.3 注意事项

在添加流控规则的时候,可能会遇到添加失败的场景,也就是点击添加后控制台上没有显示

产生原因:可能是客户端是否使用了低版本的 fastjson,低版本的 fastjson 可能会有此问题,建议使用和 Sentinel 相关组件一致版本的 fastjson。

解决方案: 我这里升级了 fastjson 的版本之后就可以正常添加了

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>

        3.4 测试接口

        因为设置的是每秒支持一个请求,所以测试的时候简单实现只要快速点击请求即可实现,结果如下,因为QPS 设置为1,所以每次通过的只有一个,拒绝 QPS 指的就是被限流请求失败的,同时到控制台看下日志,也会打出限流导致的异常日志

章末

       后续再补充熔断,负载的使用,以及搭配OpenFeign使用

        好了,文章到这里就结束了~ 


网站公告

今日签到

点亮在社区的每一天
去签到