目标:Sentinel的基本应用 工具:IDEA--2020.1、Sentinel Maven Spring Boot 学习目标:学习基于Sentinel Dashboard来实现URL资源清洗 本次学习的工程下载链接放到文本最后面
Sentinel中的HTTP服务的限流默认由Sentinel—Web-Servlet包中的CommonFilter来实现,这个Filter会把每个不同的URL都作为不同的资源来处理
在下面的这段代码中,提供携带{id}参数的REST风格API,对于每一个不同的{id},URL也都不一样,所以在默认情况下Sentinel会把所有的URL当做资源来进行流控
@RestController
public class UrlCleanController {
@GetMapping("/clean/{id}")
public String clean(@PathVariable("id")int id){
return "hello clean";
}
}
这种会导致两个问题:
正对这个问题可以通过URLCleaner接口来实现资源清洗,也就是对于/clean/{id}这个URL,我们可以统一归类到/clean/*资源下 ,实现UrlCleaner接口,并重写clean方法。
@Service
public class CustomerUrlCleaner implements UrlCleaner {
@Override
public String clean(String s) {
if (StringUtils.isEmpty(s)){ //判断字符是否为空
return s;
}
if(s.startsWith("/clean/")){ //判断起始的是不是以/clean/开始
return "/clean/*";
}
return s;
}
}
接下来启动Sentinel服务,访问 http://localhost:8080/clean/1 然后我们进入Sentinel Dashboard里面对资源进行限流。
添加成功界面如下
访问 http://localhost:8080/clean/1 和 http://localhost:8080/clean/2 后面的数字自己随便写一个就行,我们多次快速刷新访问这些界面,发现资源都被归为一类了 效果去Sentinel Dashboard里面自行观看 效果如下图所示
下载链接:sentinel-sample3.rar