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);
            
        }
    
    }
  • 相关阅读:
    java中BigDecimal的四舍五入小记
    thinking in java学习笔记:14章 类型信息
    java中==和equals
    java中值传递和引用传递
    java中的赋值
    hessian学习笔记
    springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题
    要是满足下面的其中3种情况,你就跑路吧
    vim程序编辑器---常用操作整理
    报错end Kernel panic
  • 原文地址:https://www.cnblogs.com/ch94/p/14770958.html
Copyright © 2011-2022 走看看