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

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


相关推荐
Query*20 小时前
Java 设计模式——建造者模式:从原理到实战的极简指南
java·设计模式·建造者模式
zl97989920 小时前
SpringBoot-入门介绍
java·spring boot·spring
焰火199920 小时前
[Java]基于Redis的分布式环境下的自增编号生成器
java·后端
ZhengEnCi20 小时前
JPA-SQL 语句使用完全指南-自动生成vs手动编写的智能选择策略
java·spring boot·sql
毕设源码-钟学长21 小时前
【开题答辩全过程】以 菜谱分享平台为例,包含答辩的问题和答案
java·eclipse
可DRAK鸦|・ω・`)21 小时前
docker后端jar包本地构建镜像
java·docker·容器·jar
代码不停21 小时前
JavaEE初级——Thread多线程
java·jvm·java-ee
xxxxxxllllllshi21 小时前
Cookie、Session、JWT、SSO,网站与 APP 登录持久化与缓存
java·开发语言·jvm·数据结构·缓存·面试
郑重其事,鹏程万里21 小时前
commons-io
java
爱吃烤鸡翅的酸菜鱼1 天前
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
java·算法