mcpField
R
resilience-retry

resilience-retry

github.com/rrezartprebreza开发32850 次安装6 天前更新
代码仓库

关于 resilience-retry

面向 Spring Boot 3 开发者的重试与弹性处理指南,说明 Spring Retry 和 Resilience4j 的适用场景,并指出代理、事务及幂等性方面的常见陷阱。

主要功能

  1. 01Spring Retry 与 Resilience4j 选型指南
  2. 02重试次数计算说明
  3. 03代理与自调用注意事项
  4. 04事务边界处理建议
  5. 05写操作幂等性保护

适用场景

  1. 01为 Boot 3 服务选择重试方案
  2. 02将重试与熔断器或舱壁组合
  3. 03检查事务中的重试行为
  4. 04避免支付操作产生重复副作用

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rrezartprebreza/spring-boot-skills --skill resilience-retry

安装后在 Claude Code 中输入/resilience-retry确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
examples/
bad-payment-client.java
good-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