关于 resilience-retry
面向 Spring Boot 3 开发者的重试与弹性处理指南,说明 Spring Retry 和 Resilience4j 的适用场景,并指出代理、事务及幂等性方面的常见陷阱。
主要功能
- 01Spring Retry 与 Resilience4j 选型指南
- 02重试次数计算说明
- 03代理与自调用注意事项
- 04事务边界处理建议
- 05写操作幂等性保护
适用场景
- 01为 Boot 3 服务选择重试方案
- 02将重试与熔断器或舱壁组合
- 03检查事务中的重试行为
- 04避免支付操作产生重复副作用
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ rrezartprebreza/ spring-boot-skills --skill resilience-retry安装后在 Claude Code 中输入/resilience-retry确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlexamples/bad-payment-client.javagood-payment-client.java详细介绍
弹性机制与重试(Boot 3)
Boot 3 不支持 Spring Framework 7 核心中的弹性机制注解。对于简单的命令式重试,请选择 Spring Retry;如果还需要熔断器、限流或舱壁,请选择 Resilience4j。依赖和配置都应明确设置。
@Configuration
@EnableRetry
class RetryConfig { }
@Service
class PaymentClient {
@Retryable(
retryFor = ConnectException.class,
maxAttempts = 4,
backoff = @Backoff(delay = 200, multiplier = 2.0, maxDelay = 2000))
PaymentResult charge(ChargeRequest request) { ... }
@Recover
PaymentResult recover(ConnectException error, ChargeRequest request) { ... }
}
Spring Retry 的 maxAttempts 包含初始调用。如果需要将重试与熔断器或舱壁组合使用,Resilience4j 更合适。两种方案都基于代理:自调用会绕过增强逻辑;在仅回滚事务中重试方法,不会为每次尝试创建新事务。
注意事项
- Agent 使用 Framework 7 的
@EnableResilientMethods——Boot 3 需要 Spring Retry 或 Resilience4j。 - Agent 将
maxAttempts误认为重试次数——Spring Retry 会将初始调用计入其中。 - Agent 为 Resilience4j 添加
@Recover——恢复逻辑必须通过回退机制或调用方处理来实现。 - Agent 重试自调用的方法——应通过 Spring 代理调用。
- Agent 在事务中重试,并期望每次都开启新事务——将重试逻辑移到事务 Bean 外部。
- Agent 在没有幂等键的情况下重试非幂等写操作——为支付和命令操作提供保护。
评论
支持 Markdown