2月6日java假期学习读书笔记
一、学习目标
了解Spring Cloud的限流和熔断机制。
掌握如何使用Spring Cloud Circuit Breaker实现熔断功能。
学习如何使用Resilience4j实现限流和容错。
通过实际练习,构建一个具有限流和熔断功能的微服务。
理解限流和熔断在微服务架构中的作用。
二、学习内容
(一)限流(Rate Limiting)
- 限流的概念
限流用于限制客户端对服务的访问频率,防止服务过载。
常见的限流算法包括漏桶算法(Leaky Bucket)和令牌桶算法(Token Bucket)。 - Resilience4j限流
Resilience4j是一个轻量级的容错库,支持限流、熔断、重试等功能。
添加依赖:
xml
resilience4j.ratelimiter.instances.user-service.rate=10
resilience4j.ratelimiter.instances.user-service.limitForPeriod=100
resilience4j.ratelimiter.instances.user-service.limitRefreshPeriod=1s
使用限流注解:
java
@Service
public class UserService {
@RateLimiter(name = "user-service")
public String getUserInfo() {
// 模拟调用外部服务
return "User Info";
}
}
(二)熔断(Circuit Breaker)
- 熔断的概念
熔断机制用于防止服务调用方在调用失败时继续等待,避免资源浪费。
当调用失败率达到一定阈值时,熔断器会“断开”,直接返回失败结果。 - Spring Cloud Circuit Breaker
Spring Cloud Circuit Breaker是一个通用的熔断器抽象层,支持Resilience4j等实现。
添加依赖:
xml
resilience4j.circuitbreaker.instances.user-service.failureRateThreshold=50
resilience4j.circuitbreaker.instances.user-service.waitDurationInOpenState=10s
使用熔断注解:
java
@Service
public class UserService {
@CircuitBreaker(name = "user-service", fallbackMethod = "fallback")
public String getUserInfo() {
// 模拟调用外部服务
return "User Info";
}
public String fallback(Exception e) {
return "Fallback: User Service is down";
}
}
(三)实际练习:构建一个具有限流和熔断功能的微服务
- 创建Spring Boot项目
使用Spring Initializr生成一个Spring Boot项目,添加Spring Web、Spring Cloud Circuit Breaker和Resilience4j依赖。 - 配置限流和熔断
在application.properties中配置限流和熔断规则。
使用@RateLimiter和@CircuitBreaker注解保护服务调用。 - 运行和测试
启动微服务,模拟高并发请求,验证限流功能是否生效。
模拟外部服务故障,验证熔断功能是否生效。
三、学习心得
限流的重要性
限流可以防止服务过载,确保服务的可用性。
Resilience4j提供了灵活的限流配置,支持多种算法。
熔断的作用
熔断机制可以快速失败,避免调用方资源浪费。
Spring Cloud Circuit Breaker结合Resilience4j提供了强大的熔断功能。
实践的重要性
通过实际构建和测试限流和熔断功能,我更好地理解了它们的使用方法。
实践可以帮助快速发现和解决问题,加深对知识点的理解。