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

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


相关推荐
tsyjjOvO12 分钟前
JDBC(Java Database Connectivity)
java·数据库
qq_124987075316 分钟前
基于springboot的尿毒症健康管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·spring·毕业设计·计算机毕业设计
黎子越1 小时前
python相关练习
java·前端·python
电商API&Tina1 小时前
电商数据采集 API 接口 全维度解析(技术 + 商业 + 合规)
java·大数据·开发语言·数据库·人工智能·json
liwulin05061 小时前
【JSON】使用com.fasterxml.jackson解析json字符串
java·数据库·json
what丶k1 小时前
深度解析:以Kafka为例,消息队列消费幂等性的实现方案与生产实践
java·数据结构·kafka
星火开发设计1 小时前
C++ 输入输出流:cin 与 cout 的基础用法
java·开发语言·c++·学习·算法·编程·知识
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于Springboot的酒店住宿信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
仟濹2 小时前
【Java加强】1 异常 | 打卡day1
java·开发语言·python
AllData公司负责人2 小时前
【亲测好用】实时开发平台能力演示
java·c语言·数据库