7、sentinel

控制台访问地址: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方法,直到熔断器关闭。

未开启熔断器,每次都会调,超时再走熔断方法。


相关推荐
行百里er几秒前
代码跑得慢?让Spring的StopWatch告诉你真相!
java·后端·github
又是忙碌的一天5 分钟前
SpringMVC响应
java·服务器·数据库
万物皆字节14 分钟前
Spring Cloud Gateway 启动流程源码分析
java·开发语言·spring boot
W001hhh16 分钟前
260110
java·数据库
stillaliveQEJ23 分钟前
【JavaEE】Spring IoC(一)
java·spring·java-ee
a程序小傲32 分钟前
得物Java面试被问:方法句柄(MethodHandle)与反射的性能对比和底层区别
java·开发语言·spring boot·后端·python·面试·职场和发展
酒书36 分钟前
对接阿里云号码认证实现运营商一键登录
java·阿里云
独自破碎E39 分钟前
比较版本号
java·开发语言
zimoyin1 小时前
浅浅了解下0拷贝技术
java·linux·开发语言
TaiKuLaHa1 小时前
Spring 循环依赖
java·后端·spring