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

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


相关推荐
liliangcsdn1 分钟前
结合prompt分析NodeRAG的build过程
java·服务器·人工智能·数据分析·知识图谱
黑色的山岗在沉睡23 分钟前
LeetCode 189. 轮转数组
java·算法·leetcode
会飞的小蛮猪30 分钟前
Jenkins运维之路(权限分配&忘记admin密码)
java·运维·经验分享·jenkins·prometheus
slim~43 分钟前
Java基础第9天总结(可变参数、Collections、斗地主)
java·开发语言
豆沙沙包?1 小时前
2025年- H118-Lc86. 分隔链表(链表)--Java版
java·数据结构·链表
A尘埃2 小时前
智能工单路由系统(Java)
java·开发语言·智能工单
失散133 小时前
分布式专题——1.1 Redis单机、主从、哨兵、集群部署
java·数据库·redis·分布式·架构
刘一说3 小时前
Linux调试命令速查:Java/微服务必备
java·linux·微服务
IT·陈寒3 小时前
怎么这么多 StringUtils —— Apache、Spring、Hutool 全面对比
java·spring·apache