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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 【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控制台,配置的规则将会自动从数据库加载。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
362 1
|
Java 数据中心 Sentinel
spring boot sentinel 的使用
要实现Spring Boot集成Sentinel的熔断降级,需引入Sentinel依赖并配置Dashboard地址;使用`@SentinelResource`注解定义受保护资源及blockHandler处理降级逻辑;通过Sentinel Dashboard配置熔断规则,如异常比例或响应时间。启动应用后,测试熔断功能,确保Sentinel正常工作。建议动态调整规则以提升系统稳定性。
1215 4
|
算法 Java UED
你的Spring Boot应用是否足够健壮?揭秘限流功能的实现秘诀
【8月更文挑战第29天】限流是保障服务稳定性的关键策略,通过限制单位时间内的请求数量防止服务过载。本文基于理论介绍,结合Spring Boot应用实例,展示了使用`@RateLimiter`注解和集成`Resilience4j`库实现限流的方法。无论采用哪种方式,都能有效控制请求速率,增强应用的健壮性和用户体验。通过这些示例,读者可以灵活选择适合自身需求的限流方案。
653 2
|
算法 NoSQL Java
spring cloud的限流算法有哪些?
【8月更文挑战第18天】spring cloud的限流算法有哪些?
443 3
|
Java Sentinel Spring
spring boot 整合 sentinel
spring boot 整合 sentinel
765 1
|
算法 Java 数据库连接
Spring Boot中的限流策略实现
Spring Boot中的限流策略实现
|
Java 开发者 Sentinel
Spring Cloud系列——使用Sentinel进行微服务保护
Spring Cloud系列——使用Sentinel进行微服务保护
597 5
|
分布式计算 Java MaxCompute
详解 Java 限流接口实现问题之在Spring框架中使用AOP来实现基于注解的限流问题如何解决
详解 Java 限流接口实现问题之在Spring框架中使用AOP来实现基于注解的限流问题如何解决
378 0
|
12月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
4726 2