🐳Sentinel快速入门:图文讲解操作流程
1. Sentinel简介
Sentinel是阿里巴巴开源的分布式系统的流量控制组件,旨在保护分布式系统在高并发和故障情况下的稳定性。它提供了实时的流量控制、熔断降级、系统负载保护等功能,是微服务架构中不可或缺的一环。
2. 安装Sentinel控制台
💧Sentinel控制台是Sentinel的管理工具,可以帮助您监控和管理Sentinel的各种规则和限制。安装步骤如下:
- 下载Sentinel控制台的jar包
- 运行命令:
java -jar sentinel-dashboard-xxx.jar
- 启动nacos作为服务注册中心
3. @SentinelResource注解
💧注解@SentinelResource用于标记受Sentinel保护的资源,可以定义资源的限流和降级策略。
@SentinelResource(value = "protectedResource", blockHandler = "handleBlock", fallback = "handleFallback") public void protectedResource() { // 处理受保护的资源逻辑 } public void handleBlock(BlockException ex) { // 处理流控逻辑 } public void handleFallback(Throwable ex) { // 处理降级逻辑 }
4. Sentinel的使用配置
💧在使用Sentinel之前,我们需要在应用程序中进行配置。例如,在Spring Cloud项目中,添加Sentinel的依赖,并配置相关参数。通常需要结合nacos一起使用:
<!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--SpringCloud ailibaba sentinel --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
💧然后,在application.yml
中配置Sentinel相关参数,这样,nacos8080 将会监控 8401服务
server: port: 8401 spring: application: name: cloudalibaba-sentinel-service cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 sentinel: transport: dashboard: localhost:8080 #配置Sentinel dashboard地址 port: 8719 datasource: #<---------------------------关注点,添加Nacos数据源配置 ds1: nacos: server-addr: localhost:8848 dataId: cloudalibaba-sentinel-service groupId: DEFAULT_GROUP data-type: json rule-type: flow
💧添加几个方法用于测试
@RestController @Slf4j public class FlowLimitController { @GetMapping("/testA") public String testA() { /* try { TimeUnit.MILLISECONDS.sleep(800); } catch (InterruptedException e) { e.printStackTrace(); }*/ return "------testA"; } @GetMapping("/testB") public String testB() { log.info(Thread.currentThread().getName() + "\t" + "...testB"); return "------testB"; } @GetMapping("/testD") public String testD() { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } log.info("testD 测试RT"); return "------testD"; } @GetMapping("/testE") public String testE() { log.info("testE 测试异常数"); int age = 10 / 0; return "------testE 测试异常数"; } @GetMapping("/testHotKey") @SentinelResource(value = "testHotKey", blockHandler/*兜底方法*/ = "deal_testHotKey") public String testHotKey(@RequestParam(value = "p1", required = false) String p1, @RequestParam(value = "p2", required = false) String p2) { //int age = 10/0; return "------testHotKey"; } /*兜底方法*/ public String deal_testHotKey(String p1, String p2, BlockException exception) { return "------deal_testHotKey,o(╥﹏╥)o"; //sentinel系统默认的提示:Blocked by Sentinel (flow limiting) } }
💧运行主启动类
@EnableDiscoveryClient @SpringBootApplication public class MainApp8401 { public static void main(String[] args) { SpringApplication.run(MainApp8401.class, args); } }
💧访问控制台:http://localhost:8080
,默认账号密码均为: sentinel
💧由于Sentinel采用了懒加载机制,我们不访问URL的话是不会出现监控服务的
💧访问 http://localhost:8401/testA
多刷几次看看效果
💧刷新sentinel,观察结果
💧簇点链路部分可以看到我们访问过的URL对应的方法
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程(中):https://developer.aliyun.com/article/1390159?spm=a2c6h.13148508.setting.18.4fea4f0ervlqra