zoukankan      html  css  js  c++  java
  • Sentinel 关联流量控制

    https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

    当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢,举例来说,read_db 和 write_db 这两个资源分别代表数据库读写,我们可以给 read_db 设置限流规则来达到写优先的目的:设置 strategy 为 RuleConstant.STRATEGY_RELATE 同时设置 refResource 为 write_db。这样当写库操作过于频繁时,读数据的请求会被限流。

    package com.wsm.order.controller;
    
    import com.alibaba.csp.sentinel.annotation.SentinelResource;
    import com.alibaba.csp.sentinel.slots.block.BlockException;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.concurrent.TimeUnit;
    
    @RestController
    @RequestMapping("/order")
    public class OrderController {
    
        @RequestMapping("/add")
        public String add(){
            System.out.println("下单成功!");
            return "生成订单";
        }
    
        @RequestMapping("/get")
        public String get(){
            System.out.println("查询订单!");
            return "查询订单";
        }
    
        @RequestMapping("/flow")
    //    @SentinelResource(value = "flow",blockHandler = "flowBlockHandler")
        public String flow(){
            System.out.println("========flow====");
            return "正常访问";
        }
    
        public String flowBlockHandler(BlockException e){
            return "流控了";
        }
    
        @RequestMapping("/flowThread")
    //    @SentinelResource(value = "flowThread",blockHandler = "flowThreadBlockHandler")
        public String flowThread() throws InterruptedException {
            TimeUnit.SECONDS.sleep(5);
            System.out.println("========flowThread====");
            return "正常访问";
        }
    
        public String flowThreadBlockHandler(BlockException e){
            return "flowThread流控了";
        }
    
    
    
    
    }

     

     

     当/order/add阈值超过 2 时,就会对/order/get进行限流

     

     

     

  • 相关阅读:
    驯服 Tiger: 并发集合 超越 Map、Collection、List 和 Set
    模块化Java:声明式模块化
    模块化Java:静态模块化
    用 Apache Tika 理解信息内容
    Refactoring: Encapsulate Collection
    新型的几乎万能的数据结构CDO
    CDO数据结构基础(1) 转载
    模块化Java简介(转载infoq)
    模块化Java:动态模块化
    责任链模式(C++)
  • 原文地址:https://www.cnblogs.com/mingforyou/p/15639036.html
Copyright © 2011-2022 走看看