Springboot限流工具之sentinel單機限流場景無控制檯
阿新 • • 發佈:2021-12-05
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限制策略。可以有其它多種策略可用,根據業務需要自行選定。
作者:森林木馬 出處:https://www.cnblogs.com/owenma/
-------------------------------------------
特此宣告:所有評論和私信都會在第一時間回覆。也歡迎朋友們指正錯誤,共同進步!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!
個性簽名:好記性不如勤隨筆,好隨筆還請多關注!