Overzicht van Durable Functions in de geïsoleerde .NET-werkrol
Dit artikel is een overzicht van Durable Functions in de geïsoleerde .NET-werkrol. Met de geïsoleerde werkrol kan uw Durable Functions-app worden uitgevoerd op een .NET-versie die verschilt van die van de Azure Functions-host.
Waarom Durable Functions gebruiken in de geïsoleerde .NET-werkrol?
Met dit model kunt u alle grote voordelen krijgen die worden geleverd met het geïsoleerde werkproces van Azure Functions .NET. Zie Voordelen van het geïsoleerde werkrolmodel voor meer informatie. Daarnaast bevat deze nieuwe SDK enkele nieuwe functies.
Functieverbeteringen ten opzichte van in-process Durable Functions
- Indelingsinvoer kan rechtstreeks worden geïnjecteerd:
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
- Ondersteuning voor sterk getypte oproepen en klasgerelateerde activiteiten en indelingen (OPMERKING: in preview. Zie hier voor meer informatie.)
- Plus alle voordelen van de geïsoleerde .NET-werkrol van Azure Functions.
Brongenerator en op klassen gebaseerde activiteiten en indelingen
Vereiste: toevoegen <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" />
aan uw project.
Door het brongeneratorpakket toe te voegen, krijgt u toegang tot twee nieuwe functies:
- Op klassen gebaseerde activiteiten en indelingen, een alternatieve manier om Durable Functions te schrijven. In plaats van 'functiegebaseerd' schrijft u sterk getypte klassen, die typen overnemen van de Durable SDK.
- Sterk getypte uitbreidingsmethoden voor het aanroepen van subindelingen en activiteiten. Deze uitbreidingsmethoden kunnen ook worden gebruikt vanuit op functies gebaseerde activiteiten en indelingen.
Voorbeeld op basis van een functie
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);
}
}
Voorbeeld op basis van klasse
[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);
}
}
Duurzame entiteiten
Duurzame entiteiten worden ondersteund in de geïsoleerde .NET-werkrol. Raadpleeg de handleiding voor ontwikkelaars.
Migratiehandleiding
In deze handleiding wordt ervan uitgegaan dat u begint met een .NET Durable Functions 2.x-project.
Uw project bijwerken
De eerste stap is het bijwerken van uw project naar Azure Functions .NET geïsoleerd. Werk vervolgens uw Durable Functions NuGet-pakketverwijzingen bij.
Oude:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
Nieuw:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
Uw code bijwerken
Durable Functions voor .NET geïsoleerde werkrol is een volledig nieuw pakket met verschillende typen en naamruimten. Als gevolg hiervan zijn er vereiste wijzigingen in uw code, maar veel van de API's zijn opgesteld zonder dat er wijzigingen nodig zijn.
Host.json-schema
Het schema voor Durable Functions .NET geïsoleerde werkrol en Durable Functions 2.x is ongewijzigd gebleven. Er zijn geen wijzigingen nodig.
Wijzigingen in openbare API
Deze tabel is geen volledige lijst met wijzigingen.
2.x | Geïsoleerd |
---|---|
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>() of injecteer invoer als parameter: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
DurableActivityContext |
Geen equivalent |
DurableActivityContext.GetInput<T>() |
Invoer als parameter injecteren MyActivity([ActivityTrigger] T input) |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync , parameter met details voor opnieuw proberen op te nemen TaskOptions . |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync , parameter met details voor opnieuw proberen op te nemen TaskOptions . |
IDurableOrchestrationContext.CallHttpAsync |
TaskOrchestrationContext.CallHttpAsync |
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) |
TaskOrchestrationContext.CreateReplaySafeLogger<T>() of 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 |
Verwijderen, toevoegen FunctionContext als invoerparameter |
IDurableEntityContext.HasState |
TaskEntityOperation.State.HasState |
IDurableEntityContext.BatchSize |
Verwijderd |
IDurableEntityContext.BatchPosition |
Verwijderd |
IDurableEntityContext.GetState |
TaskEntityOperation.State.GetState |
IDurableEntityContext.SetState |
TaskEntityOperation.State.SetState |
IDurableEntityContext.DeleteState |
TaskEntityOperation.State.SetState(null) |
IDurableEntityContext.GetInput |
TaskEntityOperation.GetInput |
IDurableEntityContext.Return |
Verwijderd. Methode retourwaarde die in plaats daarvan wordt gebruikt. |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync . Constructorparams verwijderd. |
IDurableOrchestrationClient.GetStatusAsync |
DurableTaskClient.GetInstanceAsync |
Gedragswijzigingen
- Het standaardgedrag van serialisatie is gewijzigd in
Newtonsoft.Json
System.Text.Json
. Zie voor meer informatie hier.