.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" />
新增至專案。
藉由新增來源產生器套件,您可以存取兩項新功能:
- 類別型活動和協調流程,這是撰寫 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) // activites 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 隔離式背景工作角色支援持久性實體。 請參閱開發人員指南。
移轉指南
本指南假設您從 .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 | 隔離式方案 |
---|---|
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 參數與 retry 詳細資料。 |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync ,包含 TaskOptions 參數與 retry 詳細資料。 |
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
。 如需詳細資訊,請參閱此處。