目录
1. Sentinel介绍参考官方文档:
https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
2. 源码地址:
https://gitee.com/acelee723/acelee-alibaba-sentinel
3. 以下参考:
http://blog.didispace.com/spring-cloud-alibaba-sentinel-1/
使用Sentinel实现接口限流
Sentinel的使用分为两部分:
- sentinel-dashboard:与hystrix-dashboard类似,但是它更为强大一些。除了与hystrix-dashboard一样提供实时监控之外,还提供了流控规则、熔断规则的在线维护等功能。
- 客户端整合:每个微服务客户端都需要整合sentinel的客户端封装与配置,才能将监控信息上报给dashboard展示以及实时的更改限流或熔断规则等。
部署Sentinel Dashboard
1). 到sentinel下载页https://github.com/alibaba/Sentinel/releases下载最新版sentinel-dashboard-1.6.0.jar
2).到下载包所在的的文件夹下cmd,执行java -jar sentinel-dashboard-1.6.0.jar
sentinel-dashboard不像Nacos的服务端那样提供了外置的配置文件,比较容易修改参数。不过不要紧,由于sentinel-dashboard是一个标准的spring boot应用,所以如果要自定义端口号等内容的话,可以通过在启动命令中增加参数来调整,比如:
-Dserver.port=8888
。默认情况下,sentinel-dashboard以8080端口启动。
3).访问http://localhost:8080/ ,账户密码都是sentinel
对于用户登录的相关配置可以在启动命令中增加下面的参数来进行配置:
-Dsentinel.dashboard.auth.username=sentinel
: 用于指定控制台的登录用户名为 sentinel;-Dsentinel.dashboard.auth.password=123456
: 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel-Dserver.servlet.session.timeout=7200
: 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;
4)这样,sentinel客户端启动成功。
部署Sentinel spring boot项目
1)新建一个spring boot项目acelee-alibaba-sentinel,pom.xml文件添加sentinel依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.aceleeyy</groupId>
<artifactId>acelee-springcloud-alibaba</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>acelee-alibaba-sentinel</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2)在application.properties文件中添加sentinel配置
spring.application.name=acelee-alibaba-sentinel
server.port=8001
# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=localhost:8080
3)新建一个controller包,下面新建一个HelloController.java的类,加一个hello的http测试接口
package com.aceleeyy.aceleespringcloudalibaba.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "aceleeyy.com";
}
}
4)启动应用,访问http://localhost:8001/hello,返回:aceleeyy.com
5)这时去刷新sentinel客户端页面,会看到hello接口的实时监控,这样整合sentinel到spring boot成功了。
配置Sentinel 的限流规则
1)在Sentinel控制台页面,点击左侧项目名称,点击下面的“簇点链路”,可以看到如下页面:
2)其中的/hello接口就是测试写的http接口路径, 点击右边列表里的“流控”按钮,为/hello接口配置限流规则,如下图:
这里做一个最简单的配置:
- 阈值类型选择:QPS
- 单机阈值:2
综合起来的配置效果就是,该接口的限流策略是每秒最多允许2个请求进入。
3)点击“新增”按钮,会看到如下记录, 其实就是“流控规则”里新增了一条记录,
4)这样,/hello接口的限流规则配置完成了。
验证Sentinel 的限流规则
1)快速的调用http://localhost:8001/hello接口,我们可以看到在快速2次刷新接口后返回:
Blocked by Sentinel (flow limiting)
2)这样,我们的spring boot整合sentinel,达到了接口的限流,感觉人生达到了Gaochao!
欢迎关注博主博客,后期博主会持续更新spring cloud alibaba 系列文章,敬请期待!