2月11日java假期学习读书笔记
一、学习目标
了解Spring Cloud Gateway的高级功能(动态路由、限流、熔断)。
掌握如何在Spring Cloud Gateway中实现动态路由和限流。
学习如何使用Spring Cloud Gateway实现熔断功能。
通过实际练习,构建一个高可用的API网关。
理解高可用性和弹性设计在微服务架构中的重要性。
二、学习内容
(一)Spring Cloud Gateway的动态路由
- 动态路由的概念
动态路由允许在运行时动态调整路由规则,而无需重启服务。
它支持基于请求的属性(如路径、头信息、查询参数等)动态选择目标服务。 - 实现动态路由
添加依赖:
xml
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/user/**
filters:
- AddRequestHeader=X-Request-Header, Request-Value
动态调整路由规则:
可以通过配置中心(如Spring Cloud Config)动态更新路由规则。
使用/actuator/refresh端点刷新配置:
bash
curl -X POST http://localhost:8080/actuator/refresh
(二)限流(Rate Limiting)
- 限流的作用
限流用于限制客户端对服务的访问频率,防止服务过载。
常见的限流算法包括漏桶算法(Leaky Bucket)和令牌桶算法(Token Bucket)。 - 实现限流
添加依赖:
xml
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/user/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20
配置Redis:
限流功能依赖Redis,需要配置Redis连接:
properties
spring.redis.host=localhost
spring.redis.port=6379
(三)熔断(Circuit Breaker)
- 熔断的作用
熔断机制用于防止服务调用方在调用失败时继续等待,避免资源浪费。
当调用失败率达到一定阈值时,熔断器会“断开”,直接返回失败结果。 - 实现熔断
添加依赖:
xml
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/user/**
filters:
- name: CircuitBreaker
args:
name: user-service
fallbackUri: forward:/fallback
实现熔断降级逻辑:
java
@RestController
public class FallbackController {
@GetMapping("/fallback")
public ResponseEntity
return ResponseEntity.ok("Fallback: User Service is down");
}
}
(四)实际练习:构建一个高可用的API网关
- 创建Spring Cloud Gateway项目
使用Spring Initializr生成一个Spring Cloud Gateway项目,添加Spring Cloud Gateway、Resilience4j和Redis依赖。 - 配置动态路由、限流和熔断
在application.yml中配置动态路由、限流和熔断规则。 - 运行和测试
启动API网关,模拟高并发请求,验证限流功能是否生效。
模拟外部服务故障,验证熔断功能是否生效。
动态更新路由规则,验证动态路由功能是否生效。
三、学习心得
动态路由的优势
动态路由允许在运行时调整路由规则,无需重启服务,提高了系统的灵活性和可用性。
它支持基于请求的属性动态选择目标服务,适合复杂的微服务架构。
限流的重要性
限流可以防止服务过载,确保服务的可用性。
Spring Cloud Gateway结合Redis提供了强大的限流功能,支持多种算法。
熔断的作用
熔断机制可以快速失败,避免调用方资源浪费。
Spring Cloud Gateway结合Resilience4j提供了灵活的熔断功能,支持自定义降级逻辑。
浙公网安备 33010602011771号