Sentinel-服务保护
本文最后更新于25 天前,其中的信息可能已经过时,如有错误请发送邮件到qiqin-chang@qq.com

基础配置:

依赖:

<!--sentinel 服务保护-->
<dependency>
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080 #控制台地址
      eager: true
      http-method-specify: true # 区分请求方式前缀(可选)
      # web-context-unify: false #开启链路分割

异常处理:

流控异常:

异常类:

@Component
public class MyBlockExceptionHandler implements BlockExceptionHandler {
​
    private ObjectMapper objectMapper = new ObjectMapper();
​
    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, String resourceName, BlockException e) throws Exception {
​
        response.setContentType("application/json;charset=utf-8");
        PrintWriter writer = response.getWriter();
​
        //R为返回结果类,请使用自己的结果类包装
        R error = R.error(500,resourceName + "被Sentinel限制了,原因" + e.getClass()); 
        String json = objectMapper.writeValueAsString(error);
        writer.write(json);
​
        writer.flush();
        writer.close();
    }
}

@SentinelResource:

异常类:

全局异常处理器:

@RestControllerAdvice //全局异常处理器
public class GlobalExceptionHandler {
    
}

方法注解:

@SentinelResource(value = "createUser-资源名称",blockHandler = "createUserFallback-兜底函数") //fallback异常

服务类中兜底函数:

//兜底回调
public Order createUserFallback(Long userId, BlockException e) { //Throwable exception
    User user = new user();
    user.setId(0L);
    user.setTotalAmount(new BigDecimal("0"));
    user.setUserId(userId);
    user.setNickName("未知用户");
    user.setAddress("异常信息:"+ e.getClass());
​
    return user;
}

OpenFeign:

请看OpenFeign章节

硬编码SphU:

try {
    SphU.entry("resourceName");   
}catch (BlockException e) {
    //编码处理            
}

流控规则:

阈值类型:

  • 阈值 请求阈值
  • QPS 每秒访问次数
  • 并发线程数 分配线程池连接数量

集群模式:

  • 单机均摊 每台服务器都分配阈值的数量
  • 总体阈值 所有服务器一共分配阈值的数量

流控模式:

  • 直接 达到阈值触发流控
  • 链路 需要开启链路分割对不同链路都可进行流控
  • 关联 需要开启链路分割关联的链路达到阈值触发流控

流控效果:

  • 快速失败 达到阈值直接失败
  • Warm UP(预热/冷启动) +冷启动时间 逐渐增加并发数直至阈值
  • 匀速排队 +最大等待时间 每秒接受阈值个请求其余请求进行排队超出最大请求时间将被舍弃

熔断降级:

  • 慢调用比例 规定时间内超时线程比例超过阈值进行熔断
  • 异常比例 规定时间内异常线程比例超过阈值进行熔断
  • 异常数 规定时间内异常数超过阈值进行熔断

热点规则:

  • 对参数实现流控规则

权限规则:

  • 设置流控应用的黑白名单

系统规则:

  • 对系统的整体阈值进行规则限流

请求限流:

线程隔离:

OpenFeign整合Sentinel:

修改chang-service模块的application.yml文件,开启Feign的sentinel功能:

feign:
  sentinel:
    enabled: true # 开启feign对sentinel的支持

测试配置:

server:
  port: 8082
  tomcat:
    threads:
      max: 50 # 允许的最大线程数
    accept-count: 50 # 最大排队等待数量
    max-connections: 100 # 允许的最大连接
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇