使用 Sentinel 实现接口限流(上)

简介: 在前面一篇文章我已经对 Sentinel 做了一个简单的介绍,相信大家都有一个简单的了解,本次主要是讲述 Sentinel 的使用。在这个过程中我会讲到通过控制台配置流控规则,整合 RestTemplate 进行流控,配合 OpenFeign 进行流控三种 Sentinel 三种使用场景。

安装 sentinel dashboard


我使用的 sentinel 版本是:  sentinel-dashboard-1.8.0


启动控制台命令:


java -jar sentinel-dashboard-1.8.0.jar


默认启动的是 8080 端口, 登录账号和密码默认为 sentinel。 如果需要修改启动端口可以在启动命令前面加 -Dserver.port=9999 修改


使用介绍


通常我们在项目中对于 sentinel 最常用的场景,就是默认的流控对接口的访问添加流控规则。Sentinel 也提供了对于 RestTemplate 、OpenFegin 的支持。


简单案例


1. 导入依赖


如果我们需要使用 sentinel ,首先我们需要在业务服务中,导入 sentinel 客户端的依赖。下面是 Maven 的 pom 依赖。 我们可以直接使用 spring-coud-starter-alibaba-sentinel 进行快速整合


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


对于 spring-cloud-alibaba 相关的版本依赖信息如下


<properties>
  <spring-boot.version>2.3.10.RELEASE</spring-boot.version>
  <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
  <spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring-boot.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${spring-cloud-alibaba.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>


2. YML 配置


我们在业务服务中导入了依赖过后,我们需要修改 application.yml 文件让服务启动过后自动注册到 sentinel-dashboard 服务上去。


spring:
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080


3. 绑定流控规则


我们可以通过 SentinelResource 对指定资源进行流控限制, 下面的 test1 对应着一个流控规则,test1 可以在 sentinel-dashboard  中直接配置


@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello () {
        return "OK";
    }
}


4. 查看管理后台


注意:如果已经启动 snetinel-dashboard 后并且启动业务服务,在 sentinel-dashboard 后台还是没有服务的话,我们可以先访问一下业务服务的接口,然后在刷新snetinel-dashboard 观察是否正常。如果还是不正常请考虑 sentinel 的 client 版本和 dashboard 是否匹配。


首先选择自己对应服务展开,然后选择**【簇点链路】** 菜单。选择需要流控的接口 /hello  然后选择 【流控】按钮进行流控配置


image.png


我们可以配置,  我们选择【阀值类型】选择【QPS】,然后设置【单机阀值】 填入 1 。表示该接口每秒钟只能接受一个 QPS ,如果超过阈值过后就会触发 【流控】默认 Sentinel 返回 Blocked by Sentinel (flow limiting)


image.png


5. 流控规则触发


如果我们需要触发流控规则我们频繁访问 /hello 接口即可。


~ curl http://127.0.0.1:8066/hello
OK%                                                                                                                                                   ~ curl http://127.0.0.1:8066/hello
Blocked by Sentinel (flow limiting)%  


通过上面的结果我们可以看到当单位时间内超过阈值过后, 就会触发 flow limit



相关文章
|
8月前
|
Java 数据安全/隐私保护 Sentinel
面试官:Sentinel是如何实现限流的?
面试官:Sentinel是如何实现限流的?
913 1
|
7月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
182 3
|
6月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
|
8月前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
8月前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
124 0
|
8月前
|
监控 算法 Java
sentinel 服务限流工作原理
sentinel 服务限流工作原理
|
8月前
|
监控 Java API
Sentinel熔断限流真的太丝滑了
Sentinel熔断限流真的太丝滑了
203 0
|
8月前
|
存储 数据库 Nacos
微服务限流Sentinel讲解(五)
微服务限流Sentinel讲解(五)
140 0
|
8月前
|
消息中间件 Java API
一文带你速通Sentinel限流规则(流控)解读
一文带你速通Sentinel限流规则(流控)解读
|
8月前
|
Java 关系型数据库 数据库
【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识(下)
【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识(下)
152 0