springcloud整合sentinel

多多指教~ / 2024-09-24 / 原文

此处只做个简单的springcloud中添加sentinel的demo

1、下载sentinel的jar,访问网址:https://github.com/alibaba/Sentinel/releases

 

2、找到本地jar文件夹,使用cmd或者终端中打开,执行java -jar sentinel-dashboard-1.8.0.jar

 启动完成

 访问可视化页面,默认账号密码都是sentinel

 此处用的是window的sentinel版本

下面是项目中需要添加的配置:

1、添加jar

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

2、在application.yml中添加

spring:
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080

3、启动项目,访问项目中任意一个controller接口,就会看到对应接口信息

 到此,springcloud的sentinel整合完成。

接下去介绍下,如何将sentinel进行配置持久化

 

 

 

 

 

 

接下去简单介绍下如何利用sentinel的dashboard控制对应接口

一、流控、降级

1、在簇点链路找到对应资源名,点击流控,选择QPS或者线程数,单位是 秒 ,设置单机阈值

流控:QPS:每秒访问数;线程数:也就是时间段内只有对应的线程数处理,超过的线程请求会等待

2、流控模式:直接、关联、链路

①直接:只针对当前资源进行流控,默认模式。

②关联:关联资源的请求超出阈值,那么会对当前资源请求有影响,比如查询和插入两个动作进行流量控制,大促的时候,保证插入成功(下单),查询稍微慢一点

 下图所示,当请求/order/add接口的时候,如果1秒请求超过2次,那么就会对/order/flowThread进行限流,请求该接口提示该接口被限流

③链路:选择链路,需要填写入口资源,对入口资源进行控制,比如某个渠道的请求进行限制访问。demo如下

@SentinelResource不止可以作用于controller接口,还能作用于serviceImpl里面的方法

1、需要在配置文件中配置

spring:
  cloud:
    sentinel:
      web-context-unify: false

2、sentinel流控配置如下

简单理解就是:/order/yyy和/order/xxx接口都是getOrder流控的接口,但前者如果每秒超过2次请求就会被流控,而后者就不会,即同一个链路,有些请求会被控制,有些请求不会

3、代码编码如下:

controller

    @GetMapping("/xxx")
    public String xxx(){
        String msg = orderService.getOrder();
        return "xxx订单 " + msg;
    }

    @GetMapping("/yyy")
    public String yyy(){
        String msg = orderService.getOrder();
        return "yyy订单 " + msg;
    }

serviceImpl

    @Override
    @SentinelResource(value = "getOrder",blockHandler = "orderBlockHandler")
    public String getOrder() {
        return "order service";
    }

    public String orderBlockHandler(BlockException e){
        return "被流控";
    }

请求后如下: