zoukankan      html  css  js  c++  java
  • 【转】 SpringCloudAlibaba--10——sentinel

    【转】 SpringCloudAlibaba--10——sentinel

    参考地址:蚂蚁课堂

    * 秒杀接口如何实现热词限流

    热词参数限流:就是对请求的某个参数进行限流,不允许一个用户一直在同一时间不停访问,从而增加秒杀的几率。比如请求上有个userId,如果是同一个userId的值在一直不停的访问,是不行的。

    举例:

    写个秒杀接口的伪代码:

    @RestController
    @Slf4j
    public class SeckillServiceImpl {
    
        public SeckillServiceImpl() {
            initSeckillRule();
        }
    
        /**
         * 秒杀路由资源
         */
        private static final String SEKILL_RULE = "seckill";
    
        /**
         * 秒杀抢购
         *
         * @return
         */
        @RequestMapping("/seckill")
        public String seckill(Long userId, Long orderId) {
            try {
                Entry entry = SphU.entry(SEKILL_RULE, EntryType.IN, 1, userId);
                return "秒杀成功";
            } catch (Exception e) {
                return "当前用户访问过度频繁,请稍后重试!";
            }
        }
        // seckill?userId=123456&orderId=644064779
        // seckill?userId=123456&orderId=644064779
    
        private void initSeckillRule() {
            ParamFlowRule rule = new ParamFlowRule(SEKILL_RULE)
                    // 对我们秒杀接口第0个参数实现限流
                    .setParamIdx(0)
                    .setGrade(RuleConstant.FLOW_GRADE_QPS)
                    // 每秒QPS最多只有1s
                    .setCount(1);
            ParamFlowRuleManager.loadRules(Collections.singletonList(rule));
            log.info(">>>秒杀接口限流策略配置成功<<<");
        }
    }

    这种方式可以实现,但是不灵活,直接写死了,最好用Sentinel 控制台好点

    控制自定义形式

    @RequestMapping("/seckill")
    @SentinelResource(value = SEKILL_RULE, fallback = "seckillFallback", blockHandler = "seckillBlockHandler")
    public String seckill(Long userId, Long orderId) {
        return "秒杀成功";
    }

    参数索引表示我们方法传递的第一个参数

    使用全局捕获异常捕获修改限流出现错误

    @RestControllerAdvice
    public class InterfaceExceptionHandler {
        @ResponseBody
        @ExceptionHandler(ParamFlowException.class)
        public String businessInterfaceException(ParamFlowException e) {
            return "您当前访问的频率过高,请稍后重试!";
        }
    }

    * 控制台热刺参数vip通道

  • 相关阅读:
    剑指offer——用两个栈实现队列
    根据前序和中序重建二叉树、后序和中序重建二叉树
    归并排序
    排序
    快速排序(java版)
    List
    单链表的基本操作
    集合
    数组
    结构体
  • 原文地址:https://www.cnblogs.com/Javastudy-note/p/13818374.html
Copyright © 2011-2022 走看看