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. 01Boot 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

詳細

Resilience and Retry (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 が適しています。どちらの方法もプロキシベースです。自己呼び出しではアドバイスが適用されず、ロールバック専用のトランザクション内でメソッドをリトライしても、試行ごとに新しいトランザクションが作られるわけではありません。

注意点

  • エージェントが Framework 7 の @EnableResilientMethods を使用します。Boot 3 では Spring Retry または Resilience4j が必要です。
  • エージェントが maxAttempts をリトライ回数と混同します。Spring Retry では初回の呼び出しも含まれます。
  • エージェントが Resilience4j に @Recover を追加します。リカバリーはフォールバックまたは呼び出し側の処理としてモデル化する必要があります。
  • エージェントが自己呼び出しされるメソッドをリトライします。Spring プロキシ経由で呼び出してください。
  • エージェントが新しいトランザクションを期待して、トランザクション内でリトライします。リトライをトランザクション対象の Bean の外に移してください。
  • エージェントが冪等性キーなしで、冪等でない書き込みをリトライします。決済やコマンド操作を保護してください。

コメント