开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第三阶段:网关限流-API 分组维度】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/685/detail/11896
网关限流-API 分组维度
内容介绍
一、简介
二、编写代码
一、简介
Sentinnle 对于 gateway 第一种维度的限流,也是基于路由维度的限流。
第二个维度的限流是自定义 API 维度,是一种更加灵活的维度,它允许我们利用Sentinnle 提供的 API,将请求路径分成对应的 API 分组,在组上设置限流规则即可。
自定义 API 分组其实是一种更细粒度的限流规则定义,允许我们将规则定义在分组上,而分组里面放的是请求路径。
二、编写代码
//自定义 API 分组
@PostConstruct
private void initCustomizedApis()
set definitions = new HashSet>();
ApiDefinition apil = new ApiDefinition("product_api1")
.setPredicateItems(new HashSet() f
//以/product-serv/product/api1开头的请求
add(new ApiPathPredicateItem().setPattern("/product-
serv/product/api1/**").
setMatchStrategy(SentinelGatewayConstants.URL_MATCH_STRATEGY_PREFIX));1);
ApiDefinition api2 = new ApiDefinition("product_api2")
.setPredicateItems(new HashSet() f
//以/product-serv/product/api2/demo1 完成的ur1路径匹配
add(new ApiPathPredicateItem().setPattern("/product-
serv/product/api2/demo1"));
]);
definitions.add(api1);
definitions.add(api2);
GatewayApiDefinitionManager.loadApiDefinitions(definitions);
在这个代码里,首先定义了两个分组,
第一个分组是以/product-serv/product/api1
,里面可以放多个请求路径规则。
第二个分组是product-serv/product/api2/demo1
,里面整个匹配在demo1 中。
接下来在两个分组里设置规则:
//配置初始化的限流参数
@PostConstruct
public void initGatewayRules()(
Set rules = new HashSet<>();
rules.add(
new GatewayFlowRule("product_zoute")
//资源名称,对应路由id
.setCount(1)
//限流國值
.setIntervalSec(1)
//统计时间窗口,单位是秒,默认是1秒
);
GatewayRuleManager.loadRules(rules);
Set rules = new Hashset<>();
rules.add(new GatewayFlowRule( resource:"product pil").setCount(1).setIntervalSec(1));
rules.add(new GatewayFlowRule( resource:"product api2").setCount(1).setIntervalSec(1));
GatewayRuleManager.loadRules(rules);
添加新的方法,对应好四个请求路径。
public classProductController (
@Autowired
private ProductService productService;
@RequestMapping("/product/api1/demo1")
public String demo1()
return "demo";
@RequestMapping("/product/api1/demo2")
public String demo2() (
return "demo";
@RequestMapping("/product/api2/demo1")
public String demo3()(
return "demo";
@ReqüestMapping("/product/api2/demo2")
public String demo4() (
return "demo";
重新启动,看看效果,写一下访问路径,依次访问四个路径,发现都被限流了。