因为springCloud Alibaba的开源,让我们看到很多cloud alibaba的组件,今天这篇文章主要讲解下cloud alibaba里开源的流控组件,原因是因为springCloud自身集成的hystrix的监控部署的复杂度,以及UI界面的不友好,所以尝试一下sentinel组件。
官方的文档传送门在这里
https://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/Sentine
有兴趣的朋友可以去看看。
这篇文章主要是讲解sentinel整合原生spring cloud框架的一些基础使用。
首先,先声明一下spring的版本:
springboot:2.0.8.RELEASE
springcloud:Finchley.SR2
sentinel:1.5.2
springCloudAlibaba:0.9.0.RELEASE
1.第一步:先引入sentinel的版本依赖

  <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-core</artifactId>
            <version>1.5.2</version>
  </dependency>
  <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-annotation-aspectj</artifactId>
            <version>1.5.2</version>
  </dependency>
  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  </dependency>

导入核心代码之后再导入sentinel控制台所需要的依赖

 <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>1.5.2</version>
 </dependency>

然后导入需要的规则依赖

 <!--alibaba sentinel 热点限流-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-parameter-flow-control</artifactId>
            <version>1.5.2</version>
        </dependency>
        <!--alibaba sentinel 整合servlet-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-web-servlet</artifactId>
            <version>1.5.2</version>
        </dependency>

2.第二步,我们启动控制台,我们可以直接下载控制台工程
https://github.com/alibaba/Sentinel/tree/master/sentinel-dashboard
然后设置脚本参数之后启动控制台
脚本参数:
java -Dserver.port=8080 #控制台端口
-Dcsp.sentinel.dashboard.server=localhost:8080 #控制台地址
-Dproject.name=sentinel-dashboard #控制台名称
-jar sentinel-dashboard.jar
启动之后可以看到控制台的UI界面
在这里插入图片描述
3.第三步,接入控制台
接入控制台比较简单,还是按照刚才前面提到的参数来启动项目
例:
-Dproject.name=sentinel-demo
-Dcsp.sentinel.dashboard.server=127.0.0.1:8080
-Dcsp.sentinel.api.port=8081
或者可以在properties文件里面写入配置

#服务配置
spring.application.name = sentinel-demo
server.port = 8081
#sentinel配置
spring.cloud.sentinel.transport.port=8081
spring.cloud.sentinel.transport.dashboard=localhost:8080

当然,在启动之前我们先写一个demo测试

 @SentinelResource(value = "demoTest",blockHandler = "exceptionHandler", blockHandlerClass = { ExceptionUtil.class })
    @GetMapping(value = "/demoTest", produces = "application/json;charset=UTF-8")
    public String getTest1()  {
            System.out.println("demoTest isOk");
            return "isOk";

    }

@SentinelResource是sentinel提供的注解方式,来规定资源名称。
blockHandler 是自己定义的错误处理方法,我们来看一下自己写的ExceptionUtil类

public class ExceptionUtil {

    /**
    * @Description: 普通阻塞错误
    * @param:
    * @return:
    * @author: fanjc
    * @Date: 2019/5/10
    */
    public static   String exceptionHandler(BlockException ex) {
        System.err.println("错误发生: " + ex.getClass().getCanonicalName());
        return "error";
    }
}

设置好之后后续如果发生错误的就可以统一收集了。

好,现在我们来启动demo项目,启动之后我们来看控制台,发现没有任何反应,这里我们要注意的是控制台首次采集数据是在首次请求接口之后才会采集的,现在我们来请求一下接口。

请求成功之后我们再来看一下控制台界面

请求资源出现了。
4.第四步,配置规则,我们在成功接入资源到控制台之后,我们来尝试配置一下规则。
先配置一个流控规则
流控规则文档
https://github.com/alibaba/Sentinel/wiki/流量控制
在这里插入图片描述
这里面写的比较明确了,这边就不多说了,我们直接先设置一个最简单的规则
为了让规则控制显示的更加直观,我们直接把阈值设置为0

然后我们再多次请求下接口

发现已经限流成功了,大家可以根据自己的实际情况来配置各种规则。

下面我们再来配置一个降级规则,在微服务中,各个服务之间的调用非常频繁,之前我们可能会采用hystrix的配置来限制服务间调用的timeout时间,现在我们用sentinel界面上设置限流时间。
为了达到测试效果,我们直接把RT(平均响应时间)设置成0ms,
在这里插入图片描述
然后再请求资源,发现到请求到第5次的时候发生了降级,然后过了5秒之后又恢复了(时间窗口时间设置为了5秒)
在这里插入图片描述
其他的规则在这里就不一一讲解了,大家可以参考官方文档进行配置,还是比较简单的,sentinel的出现给我们提供了丰富的系统规则已经人性化操作便利,后续还会讲解sentinel和配置中心以及网关的联合使用。

项目git地址:
https://github.com/fjc440/spring-cloud-learn
(master分支)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐