阅读 195

Sentinel DashBoard 实现流控动态配置

使用Sentinel Dashboard 实现流控配置

在Sentinel Dashboard 配置流控规则,可实现流量控制的动态配置,步骤如下:

  1. 启动Sentinel Dashboard服务端

  2. 在application.yml中添加配置如下:

spring: application: name: spring-cloud-sentinel cloud: sentinel: transport: dashboard: 127.0.0.1:8080 复制代码

spring.cloud.sentinel.transport.dashboard配置为Sentinel Dashboard服务端地址,用于实现流量控制监控和流量控制规则的分发。

定义一个需要限流REST接口,代码如下:

@RestController @RequestMapping("/sentinel") public class SentinelController {     @GetMapping("limit")     public String limit(){         return "Sentinel DashBoard Flow Limit";     } } 复制代码

不需要添加任何资源埋点,在默认情况下Sentinel 会对所有请求进行限流。

访问对应接口,因为没有配置流控规则,所以没被Sentinel限流

进入Sentinel Dashboard实现流控规则配置,步骤如下:

  1. 启动Sentinel-Dashboard-1.3.0.jar

  2. 访问http://127.0.0.1:8888,进入Sentinel Dashboard配置流控规则

  3. 进入spring.application.name对应的菜单,访问【簇点链路,在这列表中可看到/limit接口的资源名称。

  4. 对于/limit资源名称,可点击【流控】按钮设置对应流控规则

image-20211120180008870.png

image-20211120180041355.png

新增规则中所有配置信息,其实就是FlowRole中对应的属性设置,测试效果将单机阈值设置为1

新增完成后,再次访问http://127.0.0.1:8080/sentinel/limit接口,当QPS大于1时,可查看到对应的限流效果

Blocked By Sentinel(flow limiting) 复制代码

自定义URL限流异常

在默认情况下,URL触发限流会直接返回

Blocked By Sentinel(flow limiting) 复制代码

在实际情况下,大多数采用JSON格式的数据,所以在触发限流返回json格式数据,可以通过自定义限流异常来修改,实现UrlBlockHandler并且重写blocked方法。

@Service public class CustomUrlBlockHandler implements UrlBlockHandler{      @Override      public void blocked(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,BlockException e) throws IOException{             httpServletResponse.setHeader("Content-Type","application/json;charset=UTF-8");             String msg="请求数超过最大数,请稍后再试!";             httpServletResponse.getWirter().write(msg);         } } 复制代码

还有一种情况是,当触发限流后,直接跳转到对应降级页面,可以通过添加如下配置实现

spring: cloud: sentinel: serlvet: block-page: 降级页面url地址


作者:Gxin
链接:https://juejin.cn/post/7032592990577098766


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐