控制台访问地址:http://localhost:8080/
依赖
xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
配置文件
yml
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
# 不用等到第一次发送请求,就可以连接到控制台
eager: true
feign:
sentinel:
# 开启兜底返回 @FeignClient(value = "ms2", fallback = Ms2FeignFallBack.class)
enabled: true
流量控制
比如QPS=1,1s只能处理一个请求,其余请求会走异常处理方法(直接失败的情况下),也可以设置其他请求排队。
对controller方法流控
java
/**
* 处理controller接口的被限流后的异常处理操作
*/
@Component
public class MyBlockExceptionHandler implements BlockExceptionHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
response.setContentType("application/json;charset=utf-8");
Map<String, Object> map = new LinkedHashMap<>();
map.put("code", 500);
map.put("msg", "sentinel限流:" + e.getClass());
String string = new ObjectMapper().writeValueAsString(map);
PrintWriter writer = response.getWriter();
writer.write(string);
writer.flush();
writer.close();
}
}
对@SentinelResource(value = "sm", blockHandler = "smFallBack")修饰的方法流控
java
public String smFallBack(String uuid, BlockException blockException) {
return uuid + blockException.getClass();
}
对feign方法流控
Ms2Feign
java
@FeignClient(value = "ms2", fallback = Ms2FeignFallBack.class)
public interface Ms2Feign {
}
Ms2FeignFallBack
java
@Component
public class Ms2FeignFallBack implements Ms2Feign {
@Override
public String aa() {
return "aa的兜底回调函数";
}
@Override
public String bb(String name, int age) {
return null;
}
@Override
public String cc(String name, int age) {
return null;
}
@Override
public String dd(FeignEntity feignEntity) {
return null;
}
@Override
public String ee(Map<String, Object> reqMap) {
return null;
}
@Override
public String ff(String auth, Map<String, Object> reqMap) {
return null;
}
}
熔断
开启熔断器后,超时会走熔断方法,不会再去调feign方法,直到熔断器关闭。
未开启熔断器,每次都会调,超时再走熔断方法。