zoukankan      html  css  js  c++  java
  • springcloud(四)整合sentinel

    Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助保障微服务的稳定性。

    规则:围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

    服务端 

    下载sentinel服务端 地址:https://github.com/alibaba/Sentinel/releases

    sentinel服务端也是基于springboot开发  它的版本与客户端发开的springboot版本毫无联系,所以sentinel下载任何版本都可用

    下载完以后直接java -jar运行  默认是8080端口   登录网址http://127.0.0.1:8080/login   账号/密码:sentinel  

    未整合客户端之前登录

    客户端


    直接在pom中引入下面的依赖  版本可自行配置

    <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
                <version>2.2.1.RELEASE</version>
            </dependency>

    配置文件 我使用的是yml文件

    spring:
      cloud:
         sentinel:
            transport:
               #连接sentinel的dashboard
               dashboard: 127.0.0.1:8080
               #client-ip: 192.168.0.9:9000
               port: 8719 #注意这里的端口默认是8719  如果8719被占用会自动+1 无需当心 
               #eager: true 
                   
    #暴露的健康检查服务端点
    management:
      endpoint:
        web:
          exposure:
            include: '*'

    注:若整合完以后发现服务端还是未监听到任何客户端服务,那是因为sentinel是懒加载 需要先访问一次接口

    最终整合完成的结果

    sentinel 自定义返回错误

    例如:

    限流  重写之前

     重写之后

    方法很简单只需要重写BlockExceptionHandler 

    /**
     * 自定义Sentinel异常实现
     * 
     * @author Administrator
     *
     */
    @Component
    public class MyBlockHandler implements BlockExceptionHandler {
    
        @Override
        public void handle(HttpServletRequest request, HttpServletResponse response, BlockException ex) throws Exception {
            String msg = null;
            if (ex instanceof FlowException) {
                msg = "已被限流";
            } else if (ex instanceof DegradeException) {
                msg = "已被降级";
            } else if (ex instanceof ParamFlowException) {
                msg = "已被热点参数限流";
            } else if (ex instanceof SystemBlockException) {
                msg = "系统规则";
            } else if (ex instanceof AuthorityException) {
                msg = "授权规则";
            }
    
            response.setStatus(500);
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Type", "application/json;charset=utf-8");
            response.setContentType("application/json;charset=utf-8");
            new ObjectMapper().writeValue(response.getWriter(), msg);
            
        }
    
    }
  • 相关阅读:
    CF85E Guard Towers(二分答案+二分图)
    CF732F Tourist Reform(边双联通)
    CF949C Data Center Maintenance(建图+强联通分量)
    CF402E Strictly Positive Matrix(矩阵,强联通分量)
    CF209C Trails and Glades(欧拉路)
    POJ1201Intervals(差分约束)
    NOIP2016 天天爱跑步(树上差分)
    CF19E Fairy(树上差分)
    NOIP 2017 小凯的疑惑(同余类)
    POJ 3539 Elevator(同余类BFS)
  • 原文地址:https://www.cnblogs.com/ch94/p/14770958.html
Copyright © 2011-2022 走看看