首页 > 编程语言 > 详细

springcloud(四)整合sentinel

时间:2021-05-15 12:39:42      阅读:18      评论:0      收藏:0      [点我收藏+]

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);
        
    }

}

 

springcloud(四)整合sentinel

原文:https://www.cnblogs.com/ch94/p/14770958.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!