Spring Cloud Alibaba系列教程-05-Sentinel入门与整合
点击上方 IT牧场 ,选择 置顶或者星标技术干货每日送达!
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 加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
2 写配置:
server:
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: '*'
3 测试Controller:
@RequestMapping("/movies")
@RestController
public class MovieController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/users/{id}")
public User findById(@PathVariable 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保护(但现在还没有配置保护的规则,所以暂时还没有被保护)!
测试
1 访问 http://localhost:8010/actuator/sentinel
,可获得类似如下的结果:
{
"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配置保护的规则。
配套代码
GitHub[1]
Gitee[2]
看到这里还没过瘾,那么就来群里与更多的同学交流切磋技术,戳这里:咱们来一起抱团取暖,好吗?
干货分享
最近将个人学习笔记整理成册,使用PDF分享。关注我,回复如下代码,即可获得百度盘地址,无套路领取!
•001:《Java并发与高并发解决方案》学习笔记;•002:《深入JVM内核——原理、诊断与优化》学习笔记;•003:《Java面试宝典》•004:《Docker开源书》•005:《Kubernetes开源书》•006:《DDD速成(领域驱动设计速成)》•007:全部•008:加技术群讨论
近期热文
•如何发现 Redis 热点 Key ,解决方案有哪些?•说说JDK 的3个BUG•分享 | MySQL百万级数据分页查询及优化•技术选型 | 常用消息中间件17个维度全方位对比•分享 | 从零开始 Code Review,两年实战经验分享!
相关文章
•Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel•Spring Cloud Alibaba系列教程-01-Nacos安装与启停•Spring Cloud Alibaba系列教程-02-将应用注册到Nacos上•Spring Cloud Alibaba系列教程-03-搭建生产可用的Nacos集群•Spring Cloud Alibaba系列教程-04-使用Nacos管理配置
关注我
References
[1]
GitHub: https://github.com/eacdy/spring-cloud-study/tree/master/2019-Spring-Cloud-Alibaba/microservice-consumer-movie-ribbon-sentinel[2]
Gitee: https://gitee.com/itmuch/spring-cloud-study/tree/master/2019-Spring-Cloud-Alibaba/microservice-consumer-movie-ribbon-sentinel
喜欢就点个"在看"呗^_^