Spring Cloud Alibaba系列教程-05-Sentinel入门与整合
TIPS
本文基于:
- Spring Boot 2.1.5
- Spring Cloud Greenwich.SR1
- Spring Cloud Alibaba 0.9.0
- Nacos 1.0.0
Sentinel 是什么?
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
简单来说,Sentinel是一个轻量级的流量控制、熔断降级 Java 库。
Sentinel 具有以下特征:
- 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
- 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
- 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
- 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
入门
加依赖:
1
2
3
4
5<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>写配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15server:
port: 8010
spring:
application:
# 指定注册到nacos server上的服务名称
name: microservice-consumer-movie
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: '*'测试Controller:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MovieController {
private RestTemplate restTemplate;
public User findById( Long id){
// 这里用到了RestTemplate的占位符能力
User user = this.restTemplate.getForObject(
"http://microservice-provider-user/users/{id}",
User.class,
id
);
// ...电影微服务的业务...
return user;
}
}由代码可知,这一个普通得不能再普通的Controller!由于Sentinel starter默认情况下就会为所有的 HTTP服务提供限流埋点,所以该Controller可以受到Sentinel保护(但现在还没有配置保护的规则,所以暂时还没有被保护)!
测试
访问
http://localhost:8010/actuator/sentinel
,可获得类似如下的结果:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36{
"DegradeRules": [],
"datasources": {},
"ParamFlowRule": [],
"SystemRules": [],
"FlowRules": [],
"properties": {
"eager": false,
"enabled": true,
"datasource": {},
"transport": {
"port": "8719",
"dashboard": "localhost:8080",
"heartbeatIntervalMs": null
},
"metric": {
"fileSingleSize": null,
"fileTotalCount": null,
"charset": "UTF-8"
},
"servlet": {
"blockPage": null
},
"filter": {
"order": -2147483648,
"urlPatterns": ["/*"]
},
"flow": {
"coldFactor": "3"
},
"log": {
"dir": null,
"switchPid": false
}
}
}目前,我们还不知道
/actuator/sentinel
暴露出来的结果是什么含义,没有关系,请继续阅读下去。
总结
只需为应用添加 spring-cloud-starter-alibaba-sentinel
依赖,所有的HTTP接口都能获得Sentinel保护!当然,目前我们还没有为Sentinel配置保护的规则。
评论系统未开启,无法评论!