sentinel环境搭建及集合SpringBoot简单使用
目录:
1.SpringBoot+Nacos+OpenFeign实现服务的注册、发现、远程调用
2.SpringBoot+Nacos+Gateway实现一个端口调用多个不同服务
一、概述
Alibaba Sentinel 是一款高性能且轻量级的流量控制、熔断降级解决方案。是面向分布式服务架构的高可用流量控制组件。
先粗浅理解:
想想这样一种场景,你的应用在一个特定时间进行拼团秒杀,可以假设一下你的这个秒杀相关的接口能承载的最大流量或者最大并发是多少。我们可以假设一个很高的值,然后服务器做相关的配置来适应这个预估的最高峰。
但是凡事都有意外,假如你们的运行和市场相当给力,来的客流量已超出你们预估的流量高峰,此时怎么办?总不能让服务器崩掉吧?此时的sentinel就可以设置对一些接口进行限流,如果流量正常走A逻辑,如果超出了预估值走B逻辑,这样即使秒杀不能用了,但是其他的功能也能正常运行,毕竟应用不光有秒杀这一一个功能。
你做好了流量高峰配置,也进行了流量限制,但是你的秒杀接口在大流量访问下突然崩溃或者请求某个外部接口的时候卡死了,导致服务器资源快速消耗。也不可能眼睁睁的看着服务器崩掉,无法为用户提供服务。此时sentinel的熔断降级就起到作用了。假如出现这种意外情况就进行熔断。
二、环境搭建
1.先去官网下载一个包jar包 这个jar包使用SpringBoot编译的,所以可以直接用java -jar xxxx.jar的形式直接运行。
2.运行运行jar
java -Dserver.port=8181 -Dcsp.sentinel.dashboard.server=localhost:8181 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.6.3.jar
命令说明:
-Dserver.port=8181 代表sentinel控制台项目的端口号
-Dcsp.sentinel.dashboard.server=localhost:8181 代表本看板服务将会注册到自己的看板上
-Dproject.name=sentinel-dashboard代表本看板服务的项目名称
如果要自定义用户名和密码,在启动命令加上-Dsentinel.dashboard.auth.username=sentinel,-Dsentinel.dashboard.auth.password=123456
3.打开sentinel的后台
访问路径:http://localhost:8181 用户名和密码都是sentinel
这里的端口是上面运行jar的时候设置的。
打开如下图所示:
4.在项目中集成,我这里用的是navos+openfeign+sentinel
a.在pom.xml user-service中加入坐标
<!-- 限流、熔断框架 不连通客户端本地可用 --> <!-- spring cloud alibaba sentinel 依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2.2.9.RELEASE</version> </dependency>
b.在application.yml总做sentinel的配置
server: port: 8001 spring: application: name: user-service cloud: nacos: discovery: server-addr: 127.0.0.1:8848 group: tony-group sentinel: transport: port: 8722 #跟控制台交流的端口,随意指定一个未使用的端口即可 client-ip: 127.0.0.1 dashboard: 127.0.0.1:8181 #控制台地址 feign: sentinel: enabled: true #打开feign对sentinel的支持
3.在你想要限流的接口上加上注解
@GetMapping(Api.INFO) @SentinelResource(value = "info", blockHandler = "handleException", blockHandlerClass = CustomBlockHandler.class)//限流,配合终端使用。终端设置的一秒内只允许访问一次,访问次数多了就进入CustomBlockHandler中的异常 public ResponseBean getUserInfo() { UserBean userBean = new UserBean(); userBean.setUsername("杨洛峋"); userBean.setAge("5"); userBean.setSex("男"); userBean.setStatus(1); return ResponseBean.success(200, "获取成功", userBean); }
4.启动你的项目,并且在sentinel中的流量限制中配置info为1秒只能访问一次
此时你再调用你的info接口,慢慢调用是正的,但是一旦快速调用,就会返回异常。
总结:目前只是粗略知道有这个东西,能干什么事情,后面如果想要精细的控制,还是有不少东西需要学的。仅当作学习记录。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2013-09-06 Android解决Intent中的数据重复问题