【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识(下)

【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识(上):https://developer.aliyun.com/article/1390080

6. 热点key限流

💧除了针对整个接口的限流,Sentinel还支持对特定的热点key进行限流,以应对热点数据的访问。

6.1 创建热点key规则

💧在Sentinel控制台中,点击左侧导航栏的"热点参数限流",然后点击右上角的"新增"按钮。

💧在弹出的对话框中,填写规则信息。例如,我们设置一个参数名称为hotParam的规则,限制该参数的QPS阈值为5。

6.2 验证热点key规则

💧在浏览器中访问http://localhost:8080/hello?hotParam=1,你将看到接口返回的数据。继续访问接口,并在URL中修改hotParam参数的值,当访问超过规则中设置的QPS阈值时,将会触发热点key的限流。

7. 系统规则

💧Sentinel还提供了系统规则,用于限制整个系统的访问流量。

7.1 创建系统规则

💧在Sentinel控制台中,点击左侧导航栏的"系统规则",然后点击右上角的"新增"按钮。

💧在弹出的对话框中,填写规则信息。例如,我们设置一个QPS阈值为20的规则。

7.2 验证系统规则

💧在浏览器中访问http://localhost:8080/hello,你将看到接口返回的数据。继续刷新页面,当访问超过系统规则中设置的QPS阈值时,将会触发系统的限流,接口将无法正常访问。

8. @SentinelResource

💧除了在代码中使用@SentinelResource注解来保护接口,我们还可以使用它来定义自定义的熔断、降级、限流逻辑。

8.1 定义自定义逻辑

💧DemoController类中添加一个新的方法,并使用@SentinelResource注解来定义自定义的逻辑。例如:

@GetMapping("/custom")
@SentinelResource(value = "custom", fallback = "handleFallback", blockHandler = "handleBlock")
public String custom() {
    // 自定义业务逻辑
    return "Custom Logic";
}
// 降级处理方法
public String handleFallback() {
    return "Fallback Logic";
}
// 限流处理方法
public String handleBlock(BlockException ex) {
    return "Block Logic";
}

8.2 验证自定义逻辑

💧在浏览器中访问http://localhost:8080/custom,你将看到接口返回的数据是自定义逻辑中定义的结果。你还可以在Sentinel控制台中配置相应的熔断、降级、限流规则,以触发相应的逻辑。

9. 服务熔断功能规则持久化

💧默认情况下,Sentinel控制台中的规则只在内存中生效,并不会持久化到磁盘。如果希望规则持久化,以防止控制台重启导致规则丢失,可以进行如下配置。

9.1 创建数据库表

💧在你的MySQL数据库中执行以下SQL语句,创建Sentinel控制台的规则持久化表:

CREATE TABLE sentinel_rule (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  app_name VARCHAR(128) NOT NULL,
  resource VARCHAR(255) NOT NULL,
  limit_app VARCHAR(128),
  limit_type INT NOT NULL,
  count INT NOT NULL,
  strategy INT NOT NULL,
  ref_resource VARCHAR(255),
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
  update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

9.2 配置数据源

💧在Sentinel控制台的application.properties文件中,添加以下配置,配置数据库的连接信息:

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/sentinel?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

💧jdbc:mysql://localhost:3306/sentinel替换为你的MySQL数据库连接信息。

9.3 配置规则持久化

💧在Sentinel控制台的application.properties文件中,添加以下配置,启用规则持久化:

# 规则持久化配置
spring.cloud.sentinel.datasource.ds1.nacos.server-addr=localhost:8848
spring.cloud.sentinel.datasource.ds1.nacos.data-id=sentinel_rule
spring.cloud.sentinel.datasource.ds1.nacos.group-id=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds1.nacos.rule-type=flow

💧localhost:8848替换为你的Nacos配置中心的地址和端口。

9.4 重启Sentinel控制台

💧重启Sentinel控制台,配置的规则将会自动从数据库加载。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
3月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
82 1
|
27天前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
102 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
14天前
|
消息中间件 自然语言处理 Java
知识科普:Spring Cloud Alibaba基本介绍
知识科普:Spring Cloud Alibaba基本介绍
45 2
|
22天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
22天前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
2月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
153 23
|
3月前
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
1237 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
|
2月前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
2月前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
68 0