查看原文
其他

Spring Cloud Alibaba系列教程-05-Sentinel入门与整合

itmuch IT牧场 2021-08-10

点击上方 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: 8010spring: application: # 指定注册到nacos server上的服务名称 name: microservice-consumer-movie cloud: nacos: discovery: server-addr: 127.0.0.1:8848management: endpoints: web: exposure: include: '*'

3 测试Controller:

@RequestMapping("/movies")@RestControllerpublic 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迁移到SentinelSpring 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

喜欢就点个"在看"呗^_^

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存