Sentinel降级应用实践
背景:慢调用(响应时间比较长)、经常抛出异常
准备工作
在ProviderController 类中添加doSentinel05方法,基于此方法演示慢调用过程下的限流
//AtomicLong 类支持线程安全的自增自减操作
private AtomicLong atomicLong=new AtomicLong(1);
@GetMapping("/sentinel05")
public String doSentinel05() throws InterruptedException {
//获取自增对象的值,然后再加1
long num=atomicLong.getAndIncrement();
if(num%2==0){//模拟50%的慢调用比例
Thread.sleep(200);
}
return "sentinel 04 test";
}
Sentinel降级入门
添加降级规则,进行测试
Sentinel热点规则分析
快速入门
第一步:在sca-provider中的ResourceBlockHandler类中添加异常处理方法
public static String doHandle(Integer id,BlockException ex){
log.error("被限流了.....,{}",ex);
return "访问太频繁了....";
}
第二步:在sca-provider中ResourceService类中添加基于id查询数据的业务方法
@SentinelResource(value="resource",
blockHandlerClass = ResourceBlockHandler.class,
blockHandler = "doHandle")
public String doGetResource(Integer id){
//....
return "the data's id is "+id;
}
第三步:在sca-provider中的ProviderSentinelController中添加如下方法
@GetMapping("/sentinel/sentinel06")
public String doFindById(@RequestParam("id") Integer id){
return resourceService.doGetResource(id);
}
第四步:添加降级规则,进行测试
特定参数设计
Sentinel系统规则
快速入门
Load(负载)、RT(响应时间)、入口 QPS 、线程数和CPU使用率五个维度
Sentinel授权规则
快速入门
- 流控应用:对应的黑名单/白名单中设置的规则值,多个值用逗号隔开.
- 授权类型:白名单(允许访问),黑名单(不允许访问)
第一步:定义RequestOriginParser接口的实现类
package com.jt.provider.controller;
import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class DefaultRequestOriginParser implements RequestOriginParser {
/**
* 解析请求
* @param request
* @return
*/
@Override
public String parseOrigin(HttpServletRequest request) {
//对请求参数解析 并返回参数
//String origin = request.getParameter("origin");
//return origin;
//对请求头参数解析 并返回参数
// String token = request.getHeader("token");
// return token;
String ip = request.getRemoteAddr();
System.out.println("ip="+ ip);
return ip;
}
}
第二步:定义流控规则
第三步:测试