赞
踩
1、添加依赖
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
- <version>2021.1</version>
- </dependency>
2、SentinelConfig配置限流规则
- @Configuration
- public class SentinelConfig {
-
- @Bean
- public SentinelResourceAspect sentinelResourceAspect() {
- return new SentinelResourceAspect();
- }
-
- @PostConstruct
- private void initRules() {
- //=============================规则1=========================
- FlowRule rule1 = new FlowRule();
- rule1.setResource("rule1");//规则名称
- rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);//如果设置0则按照线程数限流,如果设置1则按照QPS(每秒查询率)限流
- rule1.setCount(100); // 每秒调用最大次数为 100 次
- rule1.setControlBehavior(0);//0快速失败,1预警,2排队等候
- rule1.setMaxQueueingTimeMs(1000);//排队超时阈值
-
- //=============================规则2=========================
- FlowRule rule2 = new FlowRule();
- rule2.setResource("rule2");
- rule2.setGrade(RuleConstant.FLOW_GRADE_QPS);
- rule2.setCount(10); // 每秒调用最大次数为 10 次
-
- List<FlowRule> rules = new ArrayList<>();
- rules.add(rule1);
- rules.add(rule2);
- FlowRuleManager.loadRules(rules);
- }
- }

3、API限流
- @SentinelResource(value = "rule1", blockHandler = "poll", blockHandlerClass = SentinelHandler.class)
- @ApiOperation("批量拉取消息")
- @PostMapping("/poll")
- public BaseResult poll(@RequestBody @Valid PollMessageRequest request){
- return BaseResult.success(kafkaService.poll(request));
- }
4、配置handler
- public class SentinelHandler {
-
- public static BaseResult poll(PollMessageRequest request, BlockException e) {
- throw new BusinessException("请勿频繁操作");
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。