熔断
2025/5/14大约 2 分钟componentcircuit breakeradaptive
自适应熔断使用示例
自适应熔断是一种智能熔断机制,通过动态分析请求错误率和系统资源使用情况来自动决定是否触发熔断。该功能特别适用于多服务器环境,能够根据各服务器的实际处理能力自动调整熔断策略,无需手动配置参数,有效降低了运维复杂度。
点击查看 自适应熔断使用示例。
配置指南
基本配置
在 sponge 创建的 web 或 gRPC 服务中,自适应熔断功能默认处于关闭状态。如需启用,请在configs
目录下的 YAML 配置文件中进行如下设置:
app:
enableCircuitBreaker: false # 是否开启自适应熔断,true:开启, false:关闭
Web 服务配置
- 默认熔断条件:
- 仅对 HTTP 500和503错误码触发熔断
- 自定义配置:
- 可扩展触发熔断的错误码范围
- 支持自定义降级处理逻辑
- 配置位置:
internal/routers/routers.go
// circuit breaker middleware
if config.Get().App.EnableCircuitBreaker {
r.Use(middleware.CircuitBreaker(
middleware.WithValidCode(http.StatusRequestTimeout), // add error code 408 for circuit breaker
middleware.WithDegradeHandler(handler), // add custom degrade handler
))
}
gRPC 服务配置
- 默认熔断条件:
- 仅对 gRPC 状态码 Internal(13)和 Unavailable(14)触发熔断
- 自定义配置:
- 可扩展触发熔断的错误码范围
- 支持自定义降级处理逻辑
- 配置位置:
internal/server/grpc.go
// circuit breaker interceptor
if config.Get().App.EnableCircuitBreaker {
unaryServerInterceptors = append(unaryServerInterceptors, interceptor.UnaryServerCircuitBreaker(
// set grpc code for circuit breaker, default already includes codes.Internal and codes.Unavailable
interceptor.WithValidCode(codes.DeadlineExceeded), // add error code 4 for circuit breaker
interceptor.WithUnaryServerDegradeHandler(handler), // add custom degrade handler
))
}