Omówienie rozszerzenia Durable Functions w izolowanym procesie roboczym platformy .NET
Ten artykuł zawiera omówienie rozszerzenia Durable Functions w izolowanym procesie roboczym platformy .NET. Izolowany proces roboczy umożliwia uruchamianie aplikacji Durable Functions na platformie .NET w wersji innej niż host usługi Azure Functions.
Dlaczego warto używać rozszerzenia Durable Functions w izolowanym procesie roboczym platformy .NET?
Użycie tego modelu umożliwia uzyskanie wszystkich wielkich korzyści, które są dostarczane z procesem roboczym izolowanym platformy Azure Functions platformy .NET. Aby uzyskać więcej informacji, zobacz Zalety izolowanego modelu procesu roboczego. Ponadto ten nowy zestaw SDK zawiera kilka nowych funkcji.
Ulepszenia funkcji w procesie Durable Functions
- Dane wejściowe aranżacji można wprowadzać bezpośrednio:
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
- Obsługa silnie typiowanych wywołań i działań opartych na klasach i aranżacji (UWAGA: w wersji zapoznawczej. Aby uzyskać więcej informacji, zobacz tutaj.
- Ponadto wszystkie korzyści wynikające z izolowanego procesu roboczego platformy .NET usługi Azure Functions.
Generator źródła i działania oparte na klasach oraz aranżacje
Wymaganie: dodaj <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" />
do projektu.
Dodając pakiet generatora źródłowego, uzyskujesz dostęp do dwóch nowych funkcji:
- Działania oparte na klasach i aranżacje, alternatywny sposób pisania funkcji Durable Functions. Zamiast "opartych na funkcjach" piszesz silnie typizowane klasy, które dziedziczą typy z zestawu Durable SDK.
- Silnie typizowane metody rozszerzenia do wywoływania podaranżów i działań. Te metody rozszerzenia mogą być również używane z działań i aranżacji opartych na funkcjach.
Przykład oparty na funkcjach
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);
}
}
Przykład oparty na klasach
[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);
}
}
Jednostki trwałe
Jednostki trwałe są obsługiwane w izolowanym procesie roboczym platformy .NET. Zobacz przewodnik dewelopera.
Przewodnik migracji
W tym przewodniku założono, że zaczynasz od projektu durable functions platformy .NET 2.x.
Aktualizowanie projektu
Pierwszym krokiem jest zaktualizowanie projektu do izolowanej platformy .NET usługi Azure Functions. Następnie zaktualizuj odwołania do pakietu NuGet rozszerzenia Durable Functions.
Stary:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
Nowa:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
Aktualizowanie kodu
Rozszerzenie Durable Functions dla izolowanego procesu roboczego platformy .NET to zupełnie nowy pakiet z różnymi typami i przestrzeniami nazw. W rezultacie istnieją wymagane zmiany w kodzie, ale wiele interfejsów API jest w kolejce bez konieczności wprowadzania zmian.
Schemat Host.json
Schemat dla izolowanego procesu roboczego platformy Durable Functions .NET i rozszerzenia Durable Functions 2.x pozostał taki sam. Nie należy stosować żadnych zmian.
Zmiany publicznego interfejsu API
Ta tabela nie jest wyczerpującą listą zmian.
2.x | Izolowana |
---|---|
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>() lub wstrzyknąć dane wejściowe jako parametr: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
DurableActivityContext |
Brak odpowiednika |
DurableActivityContext.GetInput<T>() |
Wstrzykiwanie danych wejściowych jako parametru MyActivity([ActivityTrigger] T input) |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync , dołącz TaskOptions parametr ze szczegółami ponawiania prób. |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync , dołącz TaskOptions parametr ze szczegółami ponawiania prób. |
IDurableOrchestrationContext.CallHttpAsync |
TaskOrchestrationContext.CallHttpAsync |
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) |
TaskOrchestrationContext.CreateReplaySafeLogger<T>() lub 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 |
Usunięto, dodaj FunctionContext jako parametr wejściowy |
IDurableEntityContext.HasState |
TaskEntityOperation.State.HasState |
IDurableEntityContext.BatchSize |
Usunięte |
IDurableEntityContext.BatchPosition |
Usunięte |
IDurableEntityContext.GetState |
TaskEntityOperation.State.GetState |
IDurableEntityContext.SetState |
TaskEntityOperation.State.SetState |
IDurableEntityContext.DeleteState |
TaskEntityOperation.State.SetState(null) |
IDurableEntityContext.GetInput |
TaskEntityOperation.GetInput |
IDurableEntityContext.Return |
Usuwane. Zamiast tego użyto wartości zwracanej przez metodę. |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync . Usunięto parametry konstruktora. |
IDurableOrchestrationClient.GetStatusAsync |
DurableTaskClient.GetInstanceAsync |
Zmiany zachowań
- Domyślne zachowanie serializacji zostało zmienione z
Newtonsoft.Json
naSystem.Text.Json
. Więcej informacji można znaleźć tutaj.