sentinel基本使用学习笔记

  1. 添加依赖
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    
  2. 创建rest接口,并通过SentinelResource配置限流保护资源
    @GetMapping
    @SentinelResource(value = "hello", blockHandler = "blockHandlerHello")
    public String say(){
        return "hello ,yicj" ;
    }
    public String blockHandlerHello(BlockException e){
        return "被限流了" ;
    }
    
手动配置
  1. 手动配置流控规则
    public class FlowRuleInitFunc implements InitFunc {
        @Override
        public void init() throws Exception {
            List<FlowRule> rules = new ArrayList<>() ;
            FlowRule rule = new FlowRule() ;
            rule.setCount(1) ;
            rule.setResource("hello") ;
            rule.setGrade(RuleConstant.FLOW_GRADE_QPS) ;
            rule.setLimitApp("default") ;
            rules.add(rule) ;
            FlowRuleManager.loadRules(rules);
        }
    }
    
  2. 利用SPI扩展点机制加载流控规则(经测试发现不生效)
    2.1 在/resource/META-INF/创建com.alibaba.csp.sentinel.init.InitFunc文件~~
    2.2 文件内容为com.yicj.study.sentinel.init.FlowRuleInitFunc~~
    
  3. 因为SPI扩展点不生效,这里我们可以使用ApplicationRunner手动加载
    @Component
    public class MyAppRunner implements ApplicationRunner {
        @Override
        public void run(ApplicationArguments args) throws Exception {
            // 加载流控规则
            new FlowRuleInitFunc().init();
        }
    }
    
整合dashboard配置
  1. 添加配置
     spring.cloud.sentinel.transport.port=8719
     spring.cloud.sentinel.transport.dashboard=192.168.221.128:8080
    
  2. 通过dashboard配置即可
自定义url限流异常
  1. 通过实现特定接口返回自定义信息
    @Service
    public class CustomUrlBlockHandler implements BlockExceptionHandler {
        @Override
        public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
            response.setHeader("Content-Type","application/json;charset=UTF-8");
            // {"code":999, "msg":"访问人数过多"}
            String msg = "{\"code\":999, \"msg\":\"访问人数过多\"}" ;
            response.getWriter().write(msg);
        }
    }
    
  2. 限流触发跳转自定义页面
    spring.cloud.sentinel.block-page={url}
    
资源清洗
  1. 流控资源
    @GetMapping("/clean/{id}")
    public String clean(@PathVariable("id") int id){
        return "Hello clean" ;
    }
    
  2. 清洗组件
    @Component
    public class CustomerUrlCleaner implements UrlCleaner {
        @Override
        public String clean(String originUrl) {
            if (StringUtils.isEmpty(originUrl)){
                return originUrl;
            }
            if (originUrl.startsWith("/clean/")){
                return "/clean/*" ;
            }
            return originUrl;
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值