SpringCloudAlibaba基础分享(十)

75 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

image.png

上一期分享一下sentinel的代码实现和注解实现,今天分享一下控制台实现。

  1. 控制台首先选择创建流量规则
  2. 设置资源名称(服务接口地址)
  3. 设置QPS 为1 表示每s最多能够访问1次接口(超出多少个线程,直接拒绝处理请求)

image.png

首先我们搭建sentinel环境

下载对应Sentinel-Dashboard

<https://github.com/alibaba/Sentinel/releases/tag/1.7.1> 运行即可。

运行执行命令

java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.api.port=8719 -jar
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel</artifactId>
    <version>0.2.2.RELEASE</version>

</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

代码增加注解@SentinelResource

public String getTestQpsException(BlockException e) {
    e.printStackTrace();
    return "该接口已经被QPS限流啦";
}

@SentinelResource(value = "getTestDashboard", blockHandler = "getTestQpsException" )
@RequestMapping("/getTestDashboard")
  public String getTestDashboard() {
    return "getTestDashboard" ;
}

配置文件新增配置

sentinel:
  transport:
    dashboard: 127.0.0.1:8718
  eager: true

并发线程数控制 image.png

代码示例

public String getTestThreadException(BlockException e) {
    e.printStackTrace();
    return "该接口已经被线程数限流啦";
}

@SentinelResource(value = "getTestThread", blockHandler = "getTestThreadException")
@RequestMapping("/getTestThread")
public String getTestThread() {
    System.out.println(Thread.currentThread().getName());
    try {
        Thread.sleep(1000);
    } catch (Exception e) {

    }
    return "getTestThread";
}

回顾一下之前的实现方式: 限流配置有两种方案: 1.手动使用代码配置 纯代码/注解的形式 2.Sentinel 控制台形式配置 默认情况下Sentinel 不对数据持久化,需要自己独立持久化

sentinel的优点

  • 丰富的应用场景:前哨兵承接了阿里巴巴近10年的双十一大促流的核心场景,例如秒杀(即突然流量控制在系统容量可以承受的范围),消息削峰填谷,传递流量控制,实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel同时提供实时的监控功能。您可以在控制台中看到接收应用的单台机器秒级数据,甚至500台以下规模的整合的汇总运行情况。
  • 广泛的开源生态:Sentinel提供开箱即用的与其他开源框架/库的集成模块,例如与Spring Cloud,Dubbo,gRPC的整合。您只需要另外的依赖并进行简单的配置即可快速地接入Sentinel。
  • 完善的SPI扩展点:Sentinel提供简单易用,完善的SPI扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理,适应动态数据源等。

项目启动成功之后,加载我们的限流的规则,因为Sentinel限流规则没有持久化,有需要持久化的话采用zk、nacos、阿波罗等。