0Pricing
C# Academy · レッスン

レジリエンスパイプライン

複数の戦略をレジリエンスパイプラインに組み合わせます。

「レジリエンスパイプライン」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

戦略の組み合わせ

実際のレジリエンスでは、通常、複数の戦略を連携させる必要があります。Polly v8 では、ResiliencePipelineBuilderを使ってそれらを 1 つのレジリエンスパイプラインに組み合わせられます。

ResiliencePipelineBuilder

Add...の呼び出しをチェーンし、最後にBuild()を呼び出します。その結果、呼び出しの実行に繰り返し利用できる、スレッドセーフなResiliencePipelineが生成されます。

var pipeline = new ResiliencePipelineBuilder()
    .AddRetry(new RetryStrategyOptions())
    .AddTimeout(TimeSpan.FromSeconds(5))
    .Build();

順序が重要

戦略は外側から内側へ実行されます。最初に追加した戦略が残りの戦略をラップします。一般的で正しい順序は、試行ごとのタイムアウトを再試行の内側に置き、その周囲を全体タイムアウトとサーキットブレーカーで囲む構成です。

var pipeline = new ResiliencePipelineBuilder()
    .AddTimeout(TimeSpan.FromSeconds(10))      // overall
    .AddRetry(new RetryStrategyOptions())
    .AddCircuitBreaker(new CircuitBreakerStrategyOptions())
    .AddTimeout(TimeSpan.FromSeconds(2))       // per attempt
    .Build();

型付きパイプライン

フォールバックや結果ベースの再試行のように戦略で結果を検査する場合は、ジェネリックResiliencePipelineBuilder<T>を使って、パイプラインに戻り値の型を認識させます。

var pipeline = new ResiliencePipelineBuilder<HttpResponseMessage>()
    .AddRetry(new HttpRetryStrategyOptions())
    .Build();

状態を指定した実行

クロージャーによる割り当てを避けるには、ExecuteAsyncに状態を渡します。Polly はその状態をコールバックに返します。

await pipeline.ExecuteAsync(
    static async (state, token) => await state.CallAsync(token),
    myService);

ResiliencePipelineProvider

パイプラインをインラインで構築する代わりに、DI に名前付きパイプラインを登録し、ResiliencePipelineProviderを使って解決します。これにより設定を一元管理できます。

builder.Services.AddResiliencePipeline("db", pipeline =>
{
    pipeline.AddRetry(new RetryStrategyOptions())
            .AddTimeout(TimeSpan.FromSeconds(3));
});

名前付きパイプラインの解決

ResiliencePipelineProvider<string>を注入し、必要な場所でキーを使ってパイプラインを取得します。

public class OrderService
{
    private readonly ResiliencePipeline _pipeline;
    public OrderService(ResiliencePipelineProvider<string> provider)
    {
        _pipeline = provider.GetPipeline("db");
    }
}

HttpClient のレジリエンス

AddResilienceHandler拡張メソッドは、型付きまたは名前付きのHttpClientにパイプラインを追加し、すべての送信リクエストに適用します。

builder.Services.AddHttpClient<CatalogClient>()
    .AddResilienceHandler("catalog", b =>
    {
        b.AddRetry(new HttpRetryStrategyOptions());
        b.AddCircuitBreaker(new HttpCircuitBreakerStrategyOptions());
    });

標準レジリエンスハンドラー

Microsoft は、推奨される順序で適切な再試行、サーキットブレーカー、タイムアウト、レート制限をまとめた、必要な機能が揃ったAddStandardResilienceHandlerを提供しています。

builder.Services.AddHttpClient<CatalogClient>()
    .AddStandardResilienceHandler();

パイプラインは再利用でき、構築コストも低い

パイプラインは 1 回構築して、多くの実行で再利用します。パイプラインは不変かつスレッドセーフなので、共有しても安全で効率的です。

可観測性フック

すべての戦略はコールバック(OnRetry、OnOpened、OnTimeout、OnFallback)を公開しており、Polly はテレメトリも出力します。これらをログやメトリクスに接続することで、完全な可視性を確保できます。

確認テスト

レジリエンスパイプラインをテストします。

まとめ

ResiliencePipelineBuilderは、再試行、サーキットブレーカー、タイムアウト、フォールバックを 1 つの再利用可能なパイプラインに組み合わせます。戦略は外側から内側へ実行されるため、順序が重要です。結果を扱う戦略にはジェネリックビルダーを使い、AddResiliencePipelineで名前付きパイプラインを登録し、ResiliencePipelineProviderで解決します。HTTP では、AddResilienceHandlerまたはAddStandardResilienceHandlerですべてのリクエストを保護できます。

よくある質問

「レジリエンスパイプライン」レッスンは無料ですか?

はい。「レジリエンスパイプライン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「レジリエンスパイプライン」で何を学びますか?

複数の戦略をレジリエンスパイプラインに組み合わせます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「レジリエンスパイプライン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 再試行ポリシー
  2. サーキットブレーカーパターン
  3. タイムアウトとフォールバックのポリシー
  4. レジリエンスパイプライン
← C# Academyに戻る