![28613e398f71bfda52047645424535c7.png](https://img-blog.csdnimg.cn/img_convert/28613e398f71bfda52047645424535c7.png)
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案,Sentinel 作为其核心组件之一,具有熔断与限流等一系列服务保护功能,本文将对其用法进行详细介绍。
SpringCloud实战电商项目mall-swarm(5.1k+star)地址:https://github.com/macrozheng/mall-swarm
Sentinel简介
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinel具有如下特性:
- 丰富的应用场景:承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀,可以实时熔断下游不可用应用;
- 完备的实时监控:同时提供实时的监控功能。可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况;
- 广泛的开源生态:提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合;
- 完善的 SPI 扩展点:提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。
安装Sentinel控制台
Sentinel控制台是一个轻量级的控制台应用,它可用于实时查看单机资源监控及集群资源汇总,并提供了一系列的规则管理功能,如流控规则、降级规则、热点规则等。
- 我们先从官网下载Sentinel,这里下载的是
sentinel-dashboard-1.6.3.jar
文件,下载地址:https://github.com/alibaba/Sentinel/releases - 下载完成后在命令行输入如下命令运行Sentinel控制台:
java -jar sentinel-dashboard-1.6.3.jar
- Sentinel控制台默认运行在8080端口上,登录账号密码均为
sentinel
,通过如下地址可以进行访问:http://localhost:8080
![9295f7624ff60cce35e78f1fc0725e47.png](https://img-blog.csdnimg.cn/img_convert/9295f7624ff60cce35e78f1fc0725e47.png)
- Sentinel控制台可以查看单台机器的实时监控数据。
![ad603a4f721f92dfa6190582a850159f.png](https://img-blog.csdnimg.cn/img_convert/ad603a4f721f92dfa6190582a850159f.png)
创建sentinel-service模块
这里我们创建一个sentinel-service模块,用于演示Sentinel的熔断与限流功能。
- 在pom.xml中添加相关依赖,这里我们使用Nacos作为注册中心,所以需要同时添加Nacos的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- 在application.yml中添加相关配置,主要是配置了Nacos和Sentinel控制台的地址:
server:
port: 8401
spring:
application:
name: sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
sentinel:
transport:
dashboard: localhost:8080 #配置sentinel dashboard地址
port: 8719
service-url:
user-service: http://nacos-user-service
management:
endpoints:
web:
exposure:
include: '*'
限流功能
Sentinel Starter 默认为所有的 HTTP 服务提供了限流埋点,我们也可以通过使用@SentinelResource来自定义一些限流行为。
创建RateLimitController类
用于测试熔断和限流功能。
/**
* 限流功能
* Created by macro on 2019/11/7.
*/
@RestController
@RequestMapping("/rateLimit")
public class RateLimitController {