.NET分離ワーカーのDurable Functionsの概要

.NET 分離ワーカーを使用すると、Azure Functions ホスト プロセスとは別に、サポートされている任意の .NET バージョンで Durable Functions を実行できます。 このモデルでは、依存関係の挿入、ミドルウェア、および .NET のバージョン管理を完全に制御できます。

この記事では、以下について説明します。

メリット

.NET 分離ワーカーには、Durable Functions アプリのいくつかの利点があります。

  • 独立した .NET のバージョン管理: Functions ホストの更新を待たずに、.NET 8、.NET 9、またはそれ以降でアプリを実行します。
  • 完全な依存関係の挿入: アクティビティで標準の .NET IServiceCollection / IServiceProvider パターンを使用します。
  • カスタム ミドルウェア: Functions worker ミドルウェア パイプラインを使用して、ログ記録、認証、エラー処理などの横断的な懸念事項を追加します。
  • 直接入力挿入: オーケストレーション入力は、トリガー メソッドシグネチャ ( MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)) に直接挿入できます。
  • 厳密に型指定された呼び出し (プレビュー): ソース ジェネレーター パッケージを使用すると、アクティビティとサブオーケストレーションのコンパイル時セーフな呼び出しを取得できます。 詳細については、「 ソース ジェネレーターとクラスベースの構文 (プレビュー)」を参照してください。

分離ワーカー特典の完全な一覧については、「分離ワーカー モデルの利点」を参照してください。

概要

.NET 分離ワーカーを使用して Durable Functions アプリを作成するには:

  1. 必要な NuGet パッケージをインストールします。

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />
    
  2. オーケストレーターには TaskOrchestrationContext を使用し、クライアント操作には DurableTaskClient を使用します。 完全なチュートリアルについては、 クイック スタートチュートリアル を参照してください。

プロセス実行中との主な違い

インプロセス モデルから移行する場合、またはインプロセス モデルと比較する場合、主な違いは次のとおりです。

Area 進行中 .NET 分離ワーカー
NuGet パッケージ Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.Azure.Functions.Worker.Extensions.DurableTask
オーケストレーター コンテキスト IDurableOrchestrationContext TaskOrchestrationContext
クライアントの種類 IDurableOrchestrationClient DurableTaskClient
アクティビティ コンテキスト IDurableActivityContext TaskActivityContext
名前空間 Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.DurableTask / Microsoft.Azure.Functions.Worker
リプレイ セーフ ロガー context.CreateReplaySafeLogger(log) context.CreateReplaySafeLogger("Name")

プロジェクトのセットアップ、パッケージ参照、API マッピング、動作の違い、一般的な問題に関する包括的な移行ガイドについては、「 インプロセスから分離ワーカー モデルへの移行」を参照してください。

ソース ジェネレーターとクラス ベースの構文 (プレビュー)

ソース ジェネレーター パッケージには、関数ベースの Durable Functions の代替手段が用意されています。 [Function]属性を持つ静的メソッドの代わりに、Durable SDK から継承する厳密に型指定されたクラスを記述します。

前提条件

ソース ジェネレーター NuGet パッケージをプロジェクトに追加します。

<PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0" />

このパッケージには、次の 2 つの機能があります。

  • クラス ベースのアクティビティとオーケストレーションTaskOrchestrator<TInput, TOutput>TaskActivity<TInput, TOutput>を継承する厳密に型指定されたクラス。
  • 厳密に型指定された拡張メソッド — サブオーケストレーションとアクティビティを呼び出すためのコンパイル時セーフなメソッド。 これらの拡張メソッドは、関数ベースのオーケストレーションからも機能します。

Example

次の例は、クラスベースのアクティビティを呼び出すクラスベースのオーケストレーションを示しています。

using Microsoft.DurableTask;

[DurableTask]
public class MyOrchestration : TaskOrchestrator<string, string>
{
    public override async Task<string> RunAsync(TaskOrchestrationContext context, string input)
    {
        return await context.CallActivityAsync<string>(nameof(MyActivity), input);
    }
}

[DurableTask]
public class MyActivity : TaskActivity<string, string>
{
    public override Task<string> RunAsync(TaskActivityContext context, string input)
    {
        return Task.FromResult($"Processed: {input}");
    }
}

Tip

機能入力または出力を必要としないオーケストレーションまたはアクティビティの場合は、ジェネリック型引数として object? を使用します (たとえば、 TaskOrchestrator<object?, object?>)。 このパターンでは、クラス ベースのモデルを使用しながら、アクティビティで依存関係の挿入 (たとえば、 ILogger<T>) を使用できます。

永続エンティティ

永続エンティティは、.NET 分離ワーカーでサポートされています。 詳細については、 開発者ガイドを参照してください。

次のステップ