当前位置:   article > 正文

springBoot整合Sentinel_sentinel 的springboot配置

sentinel 的springboot配置

1.引入sentinel依赖

  1. <!--sentinel-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  5. </dependency>

2)配置控制台

  1. server:
  2. port: 8088
  3. spring:
  4. cloud:
  5. sentinel:
  6. transport:
  7. dashboard: localhost:8080

3)访问order-service的任意端点

打开浏览器,访问http://localhost:8080/order/101,这样才能触发sentinel的监控。然后再访问sentinel的控制台,查看簇点链路,查看当前访问的服务

a.流控:流量控制![image-20210715191757319](assets/image-20210715191757319.png)

正在上传…

其含义是限制 /order/{orderId}这个资源的单机QPS为1,即每秒只允许1次请求,超出的请求会被拦截并报错。  

  • 关联模式:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流

    • 链路模式

      例如有两条请求链路:/test1 --> /common     ,     /test2 --> /common,如果只希望统计从/test2进入到/common的请求,则可以这样配置:

      需要给service方法添加@SentinelResource("goods") ,簇点默认是只添加controller,要使链路模式生效需要修改配置文件,关闭context整合

      1. spring:
      2. cloud:
      3. sentinel:
      4. web-context-unify: false # 关闭context整合

    • 4.流控效果 

    • 4.1 warm up 预热模式 ,应对服务冷启动的一种方案。请求阈值初始值是 maxThreshold / coldFactor,持续指定时长后,逐渐提高到maxThreshold值。而coldFactor的默认值是3.

    • 例如,我设置QPS的maxThreshold为10,预热时间为5秒,那么初始阈值就是 10 / 3 ,也就是3,然后在5秒后逐渐增长到10.

    • 4.2   排队等待

    • 当请求超过QPS阈值时,快速失败和warm up 会拒绝新的请求并抛出异常。

      而排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。

      工作原理

      例如:QPS = 5,意味着每200ms处理一个队列中的请求;timeout = 2000,意味着预期等待时长超过2000ms的请求会被拒绝并抛出异常。

热点参数限流,在controller方法上添加@sentinelresource("hot")

 隔离和降级

         1. 修改配置,开启sentinel功能

                

  1. feign:
  2. sentinel:
  3. enabled: true # 开启feign对sentinel的支持

       2.编写失败降级逻辑

        业务失败后,不能直接报错,而应该返回用户一个友好提示或者默认结果,这个就是失败降级逻辑。给FeignClient编写失败后的降级逻辑

  1. package cn.itcast.feign.clients.fallback;
  2. import cn.itcast.feign.clients.UserClient;
  3. import cn.itcast.feign.pojo.User;
  4. import feign.hystrix.FallbackFactory;
  5. import lombok.extern.slf4j.Slf4j;
  6. @Slf4j
  7. public class UserClientFallbackFactory implements FallbackFactory<UserClient> {
  8. @Override
  9. public UserClient create(Throwable throwable) {
  10. return new UserClient() {
  11. @Override
  12. public User findById(Long id) {
  13. log.error("查询用户异常", throwable);
  14. return new User();
  15. }
  16. };
  17. }
  18. }

             3.在feing-api项目中的DefaultFeignConfiguration类中将UserClientFallbackFactory注册为一个Bean:

        

  1. @Bean
  2. public UserClientFallbackFactory userClientFallbackFactory(){
  3. return new UserClientFallbackFactory();
  4. }

        4.在feign-api项目中的UserClient接口中使用UserClientFallbackFactory:

  1. import cn.itcast.feign.clients.fallback.UserClientFallbackFactory;
  2. import cn.itcast.feign.pojo.User;
  3. import org.springframework.cloud.openfeign.FeignClient;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.PathVariable;
  6. @FeignClient(value = "userservice", fallbackFactory = UserClientFallbackFactory.class)
  7. public interface UserClient {
  8. @GetMapping("/user/{id}")
  9. User findById(@PathVariable("id") Long id);
  10. }

熔断降级

状态机包括三个状态:  关闭状态,打开状态,half-open

断路器熔断策略有三种:慢调用、异常比例、异常数

慢调用:业务的响应时长(RT)大于指定时长的请求认定为慢调用请求。在指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定的阈值,则触发熔断。

 

解读:RT超过500ms的调用是慢调用,统计最近10000ms内的请求,如果请求量超过10次,并且慢调用比例不低于0.5,则触发熔断,熔断时长为5秒。然后进入half-open状态,放行一次请求做测试。

异常比例、异常数

异常比例或异常数:统计指定时间内的调用,如果调用次数超过指定请求数,并且出现异常的比例达到设定的比例阈值(或超过指定异常数),则触发熔断。

授权规则,授权就是对origin请求头的处理

1.order-service服务中,我们定义一个RequestOriginParser的实现类:

  1. package cn.itcast.order.sentinel;
  2. import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;
  3. import org.springframework.stereotype.Component;
  4. import org.springframework.util.StringUtils;
  5. import javax.servlet.http.HttpServletRequest;
  6. @Component
  7. public class HeaderOriginParser implements RequestOriginParser {
  8. @Override
  9. public String parseOrigin(HttpServletRequest request) {
  10. // 1.获取请求头
  11. String origin = request.getHeader("origin");
  12. // 2.非空判断
  13. if (StringUtils.isEmpty(origin)) {
  14. origin = "blank";
  15. }
  16. return origin;
  17. }
  18. }

2.给网关添加请求头

  1. spring:
  2. cloud:
  3. gateway:
  4. default-filters:
  5. - AddRequestHeader=origin,gateway
  6. routes:
  7. # ...略

3.配置请求规则

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/740926
推荐阅读
相关标签
  

闽ICP备14008679号