一、简介
Sentinel 是 Alibaba 的一个开源框架,是 Spring Cloud Alibaba 的一个子项目,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
和 Hystrix 的功能类似,但他和 Hystrix 的区别如下
以上图片来自网络
二、环境搭建
1、添加核心 maven 依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<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>
</dependency>
2、yml 配置文件
spring:
application:
name: sentinel
cloud:
# nacos:
# discovery:
# server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:8718
eager: true
server:
port: 8889
tomcat:
max-threads: 20
3、示例代码
@RestController
public class IndexController {
@RequestMapping("/index")
public String index() {
return "index";
}
@SentinelResource(value = "getIndexConsole",blockHandler = "getOrderQpsEx")
@RequestMapping("/getIndexConsole")
public String getIndexConsole() {
return "getIndexConsole";
}
@SentinelResource(value = "getOrderConsole",fallback = "getFallBackEx")
@RequestMapping("/getOrderConsole")
public String getOrderConsole() {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "getOrderConsole";
}
public String getOrderQpsEx(BlockException e) {
return "接口已经被限流";
}
public String getFallBackEx() {
return "接口已经被熔断";
}
}
@SentinelResource
为配置失败后执行的方法,他有几个参数
fallback
服务降级(超时,异常)执行方法
blockHandler
限流/熔断执行方法
4、启动 sentinel 控制台
sentinel-dashboard 是官方提供的控制台,可以方便地通过界面的方式进行操作,下载地址
https://github.com/huangliangyun/alibaba-learning/blob/master/spring-cloud-alibaba/sentinel-dashboard-1.6.2.jar
下载之后通过以下命令启动
java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.api.port=8719 -jar sentinel-dashboard-1.6.2.jar
-Dserver.port=8718
控制台端口sentinel 控制台是一个 spring boot 程序,可以通过这个端口访问控制台。
-Dcsp.sentinel.dashboard.server=localhost:8718
向控制台发送心跳包的控制台地址,指定控制台后客户端会自动向该地址发送心跳包。
-Dproject.name=sentinel-dashboard
指定Sentinel控制台程序的名称
-Dcsp.sentinel.api.port=8719
客户端提供给Dashboard访问或者查看Sentinel的运行访问的参数,默认8719
5、访问控制台
启动控制台后,可访问以下地址,账号密码都是 sentinel
http://localhost:8718/#/dashboard
6、操作实例
我们可以添加一个限流规则
资源名
接口名称,比如在示例代码里面的 getIndexConsole
Qps
接口每秒最多处理几个请求
线程数
接口最多允许几个线程处理
单击阈值
如果数值为 2 表示每秒只能处理 2 个请求
代码下载
https://github.com/huangliangyun/alibaba-learning/tree/master/spring-cloud-alibaba
—— 完
最后,感谢您阅读我的文章,如果觉得对您有帮助,麻烦点点关注,您的鼓励和支持是我最大的动力,我会坚持每天更新,如果有什么错误,麻烦指正,最后祝您工作顺利,生活愉快!
ABOUT
公众号:【星尘Pro】
github:https://github.com/huangliangyun
参考资料
https://github.com/alibaba/Sentinel