1. 程式人生 > 其它 >Springboot限流工具之sentinel單機限流場景無控制檯

Springboot限流工具之sentinel單機限流場景無控制檯

1. sentinel簡介

隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。

2.包引入和配置

本次方案是不引入控制檯的限流應用

maven包的引入

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

application.yml加一個qps限制

qps:
  limit:2

  

3.介面限流程式碼

1.介面程式碼

@RestController
public class MyController {
    @RequestMapping("/hello")
    @SentinelResource(value = SentinelRuleConfig.QPS_LIMIT)
    public String hello(){
        return "hello";
    }
}

2.單機全侷限流配置類SentinelRuleConfig.class

@Component
public class SentinelRuleConfig implements InitializingBean {

    @Value("${qps.limit}")
    private Integer limit;

    public final static String QPS_LIMIT = "concurrent_qps_limit";

    @Override
    public void afterPropertiesSet() {
        initFlowQpsRule(QPS_LIMIT);
    }

    private void initFlowQpsRule(String resource) {
        List<FlowRule> rules = new ArrayList<>();
        FlowRule rule1 = new FlowRule();
        rule1.setResource(resource);
        rule1.setCount(limit);
        rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
        rules.add(rule1);
        FlowRuleManager.loadRules(rules);
    }
}

3.拒絕策略

支援自定義異常處理通過blockHandler來定義處理類,我採用的是全域性異常處理統一返回固定資訊

@RestControllerAdvice
public class GlobalExceptionHandler{

    /**
     * 限流異常
     */
    @ExceptionHandler(FlowException.class)
    public Result flowExceptionHandler(FlowException ex) {
        return Result.failed(ex.msg);
    }
}

4.介面限流測試

已經用jemter或者postman等工具手動測試,發現每秒介面併發超過2的時候會返回我們定義的提示資訊。

5. 總結

本文介紹的是sentinel的單機使用場景,不支援叢集,不需要引入控制檯。目前demo中介紹了一種qps限制策略。可以有其它多種策略可用,根據業務需要自行選定。

sentinel原始碼連結

  

作者:森林木馬 出處:https://www.cnblogs.com/owenma/

-------------------------------------------

特此宣告:所有評論和私信都會在第一時間回覆。也歡迎朋友們指正錯誤,共同進步!

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!

個性簽名:好記性不如勤隨筆,好隨筆還請多關注!