.NET 分離ワーカーの Durable Functions の概要
この記事は、.NET 分離ワーカーの Durable Functions の概要です。 分離ワーカーを使用すると、Durable Functions アプリを、Azure Functions ホストとは異なる .NET バージョンで実行できます。
.NET 分離ワーカーの Durable Functions を使用する理由
このモデルを使用すると、Azure Functions .NET 分離ワーカー プロセスに付随するすべての優れた利点を得ることができます。 詳細については、「分離ワーカー モデルの利点」を参照してください。 さらに、この新しい SDK には、いくつかの新しい機能が含まれています。
インプロセス Durable Functions に対する機能の改善
- オーケストレーション入力を次のように直接挿入できます。
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
- 厳密に型指定された呼び出しとクラスベースのアクティビティとオーケストレーションのサポート (注: プレビュー段階です。詳細については、こちらを参照してください)。
- 加えて、Azure Functions .NET 分離ワーカーのすべての利点。
ソース ジェネレーターとクラスベースのアクティビティとオーケストレーション
要件: プロジェクトに <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" />
を追加します。
ソース ジェネレーター パッケージを追加すると、次の 2 つの新機能にアクセスできます。
- クラスベースのアクティビティとオーケストレーション。Durable Functions を記述する別の方法です。 "関数ベース" の代わりに、Durable SDK から型を継承する厳密に型指定されたクラスを記述します。
- 厳密に型指定された拡張メソッド。サブ オーケストレーションとアクティビティを呼び出します。 これらの拡張メソッドは、"関数ベースの" アクティビティとオーケストレーションからも使用できます。
関数ベースの例
public static class MyFunctions
{
[Function(nameof(MyActivity))]
public static async Task<string> MyActivity([ActivityTrigger] string input)
{
// implementation
}
[Function(nameof(MyOrchestration))]
public static async Task<string> MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, string input)
{
// implementation
return await context.CallActivityAsync(nameof(MyActivity), input);
}
}
クラスベースの例
[DurableTask(nameof(MyActivity))]
public class MyActivity : TaskActivity<string, string>
{
private readonly ILogger logger;
public MyActivity(ILogger<MyActivity> logger) // activities have access to DI.
{
this.logger = logger;
}
public async override Task<string> RunAsync(TaskActivityContext context, string input)
{
// implementation
}
}
[DurableTask(nameof(MyOrchestration))]
public class MyOrchestration : TaskOrchestrator<string, string>
{
public async override Task<string> RunAsync(TaskOrchestrationContext context, string input)
{
ILogger logger = context.CreateReplaySafeLogger<MyOrchestration>(); // orchestrations do NOT have access to DI.
// An extension method was generated for directly invoking "MyActivity".
return await context.CallMyActivityAsync(input);
}
}
持続エンティティ
持続エンティティは、.NET Isolated worker でサポートされています。 開発者ガイドを参照してください。
移行ガイド
このガイドでは、.NET Durable Functions 2.x プロジェクトから着手することを想定しています。
プロジェクトを更新する
最初の手順は、Azure Functions .NET 分離にプロジェクトを更新することです。 次に、Durable Functions NuGet パッケージ参照を更新します。
旧:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
新規:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
コードを更新する
.NET 分離ワーカーの Durable Functions は、型と名前空間が異なるまったく新しいパッケージです。 結果としてコードに必要な変更がありますが、多くの API は変更を必要せずに適合します。
Host.json スキーマ
Durable Functions .NET 分離ワーカーと Durable Functions 2.x のスキーマは同じままで、変更は必要ありません。
パブリック API の変更
この表は、変更の全一覧ではありません。
2.x | Isolated |
---|---|
IDurableOrchestrationClient |
DurableTaskClient |
IDurableOrchestrationClient.StartNewAsync |
DurableTaskClient.ScheduleNewOrchestrationInstanceAsync |
IDurableEntityClient.SignalEntityAsync |
DurableTaskClient.Entities.SignalEntityAsync |
IDurableEntityClient.ReadEntityStateAsync |
DurableTaskClient.Entities.GetEntityAsync |
IDurableEntityClient.ListEntitiesAsync |
DurableTaskClient.Entities.GetAllEntitiesAsync |
IDurableEntityClient.CleanEntityStorageAsync |
DurableTaskClient.Entities.CleanEntityStorageAsync |
IDurableOrchestrationContext |
TaskOrchestrationContext |
IDurableOrchestrationContext.GetInput<T>() |
TaskOrchestrationContext.GetInput<T>() または、パラメーターとして次のように入力を挿入します。MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
DurableActivityContext |
同等の機能がありません |
DurableActivityContext.GetInput<T>() |
パラメーターとして次のように入力を挿入します。MyActivity([ActivityTrigger] T input) |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync 。再試行の詳細を含む TaskOptions パラメーターを含めます。 |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync 。再試行の詳細を含む TaskOptions パラメーターを含めます。 |
IDurableOrchestrationContext.CallHttpAsync |
TaskOrchestrationContext.CallHttpAsync |
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) |
TaskOrchestrationContext.CreateReplaySafeLogger<T>() または TaskOrchestrationContext.CreateReplaySafeLogger(string) |
IDurableOrchestrationContext.CallEntityAsync |
TaskOrchestrationContext.Entities.CallEntityAsync |
IDurableOrchestrationContext.SignalEntity |
TaskOrchestrationContext.Entities.SignalEntityAsync |
IDurableOrchestrationContext.LockAsync |
TaskOrchestrationContext.Entities.LockEntitiesAsync |
IDurableOrchestrationContext.IsLocked |
TaskOrchestrationContext.Entities.InCriticalSection |
IDurableEntityContext |
TaskEntityContext . |
IDurableEntityContext.EntityName |
TaskEntityContext.Id.Name |
IDurableEntityContext.EntityKey |
TaskEntityContext.Id.Key |
IDurableEntityContext.OperationName |
TaskEntityOperation.Name |
IDurableEntityContext.FunctionBindingContext |
削除されました。入力パラメーターとして FunctionContext を追加 |
IDurableEntityContext.HasState |
TaskEntityOperation.State.HasState |
IDurableEntityContext.BatchSize |
削除済み |
IDurableEntityContext.BatchPosition |
削除済み |
IDurableEntityContext.GetState |
TaskEntityOperation.State.GetState |
IDurableEntityContext.SetState |
TaskEntityOperation.State.SetState |
IDurableEntityContext.DeleteState |
TaskEntityOperation.State.SetState(null) |
IDurableEntityContext.GetInput |
TaskEntityOperation.GetInput |
IDurableEntityContext.Return |
削除されます。 代わりに使用されるメソッドの戻り値。 |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync . コンストラクターのパラメータが削除されました。 |
IDurableOrchestrationClient.GetStatusAsync |
DurableTaskClient.GetInstanceAsync |
動作の変更
- シリアル化の既定の動作が から
Newtonsoft.Json
にSystem.Text.Json
変更されました。 詳細については、このページを参照してください。