.NET 分離ワーカーを使用すると、Azure Functions ホスト プロセスとは別に、サポートされている任意の .NET バージョンで Durable Functions を実行できます。 このモデルでは、依存関係の挿入、ミドルウェア、および .NET のバージョン管理を完全に制御できます。
この記事では、以下について説明します。
- Durable Functions の独立ワーカーの利点
- 必要なパッケージの導入を始める
- インプロセスとの主な違い API と名前空間
- 厳密に型指定されたオーケストレーションのソース ジェネレーターとクラスベースの構文 (プレビュー)
メリット
.NET 分離ワーカーには、Durable Functions アプリのいくつかの利点があります。
- 独立した .NET のバージョン管理: Functions ホストの更新を待たずに、.NET 8、.NET 9、またはそれ以降でアプリを実行します。
-
完全な依存関係の挿入: アクティビティで標準の .NET
IServiceCollection/IServiceProviderパターンを使用します。 - カスタム ミドルウェア: Functions worker ミドルウェア パイプラインを使用して、ログ記録、認証、エラー処理などの横断的な懸念事項を追加します。
-
直接入力挿入: オーケストレーション入力は、トリガー メソッドシグネチャ (
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)) に直接挿入できます。 - 厳密に型指定された呼び出し (プレビュー): ソース ジェネレーター パッケージを使用すると、アクティビティとサブオーケストレーションのコンパイル時セーフな呼び出しを取得できます。 詳細については、「 ソース ジェネレーターとクラスベースの構文 (プレビュー)」を参照してください。
分離ワーカー特典の完全な一覧については、「分離ワーカー モデルの利点」を参照してください。
概要
.NET 分離ワーカーを使用して Durable Functions アプリを作成するには:
必要な NuGet パッケージをインストールします。
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />オーケストレーターには
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 分離ワーカーでサポートされています。 詳細については、 開発者ガイドを参照してください。