.NET 独立辅助角色中的 Durable Functions 概述
本文概述了 .NET 独立辅助角色中的 Durable Functions。 借助独立辅助角色,Durable Functions 应用可在不同于 Azure Functions 主机的 .NET 版本上运行。
使用此模型,可以获得 Azure Functions .NET 隔离工作进程带来的所有好处。 有关详细信息,请参阅独立辅助角色模型优点。 此外,此新 SDK 包括一些新的功能。
- 可以直接注入业务流程输入:
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<SayHelloTyped> 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 无需更改即可使用。
Durable Functions .NET 独立辅助角色和 Durable Functions 2.x 的架构保持不变,无需进行任何更改。
此表并非详尽的更改列表。
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 参数。 |
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 。 删除的构造函数参数。 |
- 序列化默认行为已从
Newtonsoft.Json
更改为System.Text.Json
。 有关详细信息,请参阅此文。