目录
为什么要流控
解决方案
超时机制
服务限流
服务熔断
服务降级
Sentinel工作原理
Sentinel保护方式
API实现
引入依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.0</version>
</dependency>
@RestController
@RequestMapping("/sentinel/")
public class HelloController {
@Resource
OrderFeignService orderFeignService;
private static final String RESOURCE_NAME="helloSentinel";
@RequestMapping("hello")
public String findOrders(@RequestParam(value = "id") String id){
Entry entry=null;
try {
entry= SphU.entry(RESOURCE_NAME);//资源名,唯一标识字符串
//要保护的业务
System.out.println("正常");
return orderFeignService.findOrders(id).getName();
} catch (BlockException e) {
return "流控了";
} catch (Exception e){
Tracer.traceEntry(e,entry);
}finally{
if(entry!=null){
entry.exit();
}
}
return null;
}
/**定义流控规则**/
@PostConstruct
private static void initFlowRules(){
List<FlowRule> list=new ArrayList<>();
FlowRule rule=new FlowRule();
//设置受保护的资源
rule.setResource(RESOURCE_NAME);
//设置流控规则 QPS
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
//设置受保护资源的阈值
rule.setCount(1);
list.add(rule);
FlowRuleManager.loadRules(list);//加载配置好的规则
}
}
狂点请求接口:http://localhost:8048/sentinel/hello?id=1
也可以用注解 SentinelResource
@RequestMapping("testSenOrders")
@SentinelResource(value = "