Översikt över Durable Functions i den isolerade .NET-arbetaren
Den här artikeln är en översikt över Durable Functions i den isolerade .NET-arbetaren. Med den isolerade arbetaren kan din Durable Functions-app köras på en annan .NET-version än Azure Functions-värdens.
Varför ska du använda Durable Functions i den isolerade .NET-arbetaren?
Med den här modellen kan du få alla de stora fördelar som följer med Azure Functions .NET-isolerade arbetsprocess. Mer information finns i Fördelar med den isolerade arbetsmodellen. Dessutom innehåller den här nya SDK:n några nya funktioner.
Funktionsförbättringar jämfört med pågående Durable Functions
- Orkestreringsindata kan matas in direkt:
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
- Stöd för starkt skrivna anrop och klassbaserade aktiviteter och orkestreringar (OBS! i förhandsversion. Mer information finns här.)
- Plus alla fördelar med Azure Functions .NET-isolerad arbetare.
Källgenerator och klassbaserade aktiviteter och orkestreringar
Krav: lägg till <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" />
i projektet.
Genom att lägga till källgeneratorpaketet får du åtkomst till två nya funktioner:
- Klassbaserade aktiviteter och orkestreringar, ett alternativt sätt att skriva Durable Functions. I stället för "funktionsbaserad" skriver du starkt inskrivna klasser, som ärver typer från Durable SDK.
- Starkt inskrivna tilläggsmetoder för att anropa underorkestreringar och aktiviteter. Dessa tilläggsmetoder kan också användas från "funktionsbaserade" aktiviteter och orkestreringar.
Funktionsbaserat exempel
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);
}
}
Klassbaserat exempel
[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);
}
}
Varaktiga entiteter
Varaktiga entiteter stöds i den isolerade .NET-arbetaren. Se utvecklarguiden.
Migreringsguide
Den här guiden förutsätter att du börjar med ett .NET Durable Functions 2.x-projekt.
Uppdatera projektet
Det första steget är att uppdatera projektet till Azure Functions .NET isolerad. Uppdatera sedan nuGet-paketreferenserna för Durable Functions.
Gamla:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
Ny:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
Uppdatera koden
Durable Functions för .NET-isolerad arbetare är ett helt nytt paket med olika typer och namnområden. Det finns nödvändiga ändringar i koden som ett resultat, men många av API:erna överensstämmer utan ändringar som behövs.
Host.json-schema
Schemat för Durable Functions .NET isolerad arbetare och Durable Functions 2.x har förblivit detsamma, inga ändringar ska behövas.
Offentliga API-ändringar
Den här tabellen är inte en fullständig lista över ändringar.
2.x | Isolerad |
---|---|
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>() eller mata in indata som en parameter: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
DurableActivityContext |
Ingen motsvarighet |
DurableActivityContext.GetInput<T>() |
Mata in indata som en parameter MyActivity([ActivityTrigger] T input) |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync , inkludera TaskOptions parametern med återförsöksinformation. |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync , inkludera TaskOptions parametern med återförsöksinformation. |
IDurableOrchestrationContext.CallHttpAsync |
TaskOrchestrationContext.CallHttpAsync |
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) |
TaskOrchestrationContext.CreateReplaySafeLogger<T>() eller 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 |
Borttagen, lägg till FunctionContext som en indataparameter |
IDurableEntityContext.HasState |
TaskEntityOperation.State.HasState |
IDurableEntityContext.BatchSize |
Borttagna |
IDurableEntityContext.BatchPosition |
Borttagna |
IDurableEntityContext.GetState |
TaskEntityOperation.State.GetState |
IDurableEntityContext.SetState |
TaskEntityOperation.State.SetState |
IDurableEntityContext.DeleteState |
TaskEntityOperation.State.SetState(null) |
IDurableEntityContext.GetInput |
TaskEntityOperation.GetInput |
IDurableEntityContext.Return |
Bort. Metodreturvärde som används i stället. |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync . Konstruktorparamer har tagits bort. |
IDurableOrchestrationClient.GetStatusAsync |
DurableTaskClient.GetInstanceAsync |
Förändringar i beteende
- Standardbeteendet för serialisering har ändrats från
Newtonsoft.Json
tillSystem.Text.Json
. Mer information finns här.