侧边栏壁纸
博主头像
Epoch

Java开发、Python爬虫、微服务、分布式、前端

  • 累计撰写 93 篇文章
  • 累计创建 110 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

Sentinel——自定义URL限流异常

Epoch
2020-06-14 / 0 评论 / 0 点赞 / 293 阅读 / 432 字 / 正在检测是否收录...

目标:Sentinel的基本应用
工具:IDEA–2020.1、Sentinel Maven
学习目标:学习Sentinel的自定义URL限流异常
本次学习的工程下载链接放到文本最后面


1.Sentinel在默认情况下,URL触发限流后会直接返回。

Blocked by Sentinel (flow limiting)

2.我们一般都是在应用中用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 message = "{\"code\":999,\"msg\":\"访问人数过多\"}";
        //如果加了转义符号看不明白
        //使用类创建就json对象
        httpServletResponse.getWriter().write(message);
    }
}

或者是触发限流后我们希望跳转到其他界面(降级界面)我们可以配置spring.cloud.sentinel.servlet.block-page={url}来实现

接下来我们访问一下我们的dash资源(记得重新给我们的Sentinel Dashboard上流控规则)

HL9)XSGUU)0E7BW9$X287DW.png

跳转降级界面测试

修改application中的文件为:

spring:
  application:
    name: springboot-sentinel-sample
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:7777
      servlet:
        block-page: /goerror

在DashboardController控制器里面加一个接口

    @GetMapping("/goerror")
    private String error(){
        return "error";
    }

我们先把我们的我们自定义限流异常给注释掉,加上我们的降级跳转界面(记得重新给我们的Sentinel Dashboard上流控规则)。

多刷新几次这个界面 http://localhost:8080/dash
看到的效果如下:
0944@K5)U6T6OW$HBNH}S02.png


下载链接:sentinel-sample2.rar

0

评论区