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方法,直到熔断器关闭。

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


相关推荐
ba_pi16 小时前
mysql 查询所有表名并授权
java
ProcessOn官方账号16 小时前
java函数式编程--入门基础
java·编程·函数式编程
一嘴一个橘子16 小时前
优惠券秒杀思路,redis 分布式锁 方式
java
xufengzhu17 小时前
Java 虚拟线程实战指南(JDK 21+)
java·虚拟线程·jdk21+
大猫和小黄17 小时前
吃透Java泛型:从原理避坑到实战落地
java·泛型
Bingo_BIG17 小时前
Java Spring框架:单表的查询、新增、修改、删除、导入、导出
java·spring·前后端
程序猿_极客18 小时前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
白远山19 小时前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
码兄科技19 小时前
24小时自助健身房系统软件开发实战指南:功能设计与部署方案
java·spring boot·uni-app
程序猿_极客19 小时前
【免费】分享一套优质的基于SpringBoot的扶贫助农管理系统(详解)
java·springboot·课程设计·计算机项目