A Durable Functions áttekintése a .NET izolált feldolgozójában
Ez a cikk áttekintést nyújt a Durable Functionsről a .NET izolált feldolgozójában. Az izolált feldolgozó lehetővé teszi, hogy a Durable Functions-alkalmazás az Azure Functions-gazdagépétől eltérő .NET-verzión fusson.
Miért érdemes a Durable Functionst használni a .NET izolált feldolgozójában?
Ezzel a modellel az Azure Functions .NET izolált feldolgozói folyamatával járó összes nagyszerű előnyt élvezheti. További információ: Az izolált feldolgozói modell előnyei. Emellett ez az új SDK néhány új funkciót is tartalmaz.
Funkciófejlesztések a folyamatban lévő Durable Functions szolgáltatással szemben
- A vezénylési bemenet közvetlenül injektálható:
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
- Erősen gépelt hívások, osztályalapú tevékenységek és vezénylések támogatása (MEGJEGYZÉS: előzetes verzióban. További információ: itt.)
- Plusz az Azure Functions .NET izolált feldolgozójának minden előnye.
Forrásgenerátor és osztályalapú tevékenységek és vezénylések
Követelmény: hozzáadás <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" />
a projekthez.
A forrásgenerátorcsomag hozzáadásával két új funkcióhoz férhet hozzá:
- Osztályalapú tevékenységek és vezénylések, a Durable Functions írásának alternatív módja. A "függvényalapú" helyett erősen beírt osztályokat ír, amelyek a Durable SDK-ból öröklik a típusokat.
- Az alvezénylések és tevékenységek meghívására szolgáló, erősen gépelt bővítménymetszeti módszerek . Ezek a bővítménymetelyek "függvényalapú" tevékenységekből és vezénylésekből is használhatók.
Függvényalapú példa
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);
}
}
Osztályalapú példa
[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);
}
}
Tartós entitások
A tartós entitások támogatottak a .NET izolált feldolgozójában. Lásd a fejlesztői útmutatót.
Migrálási útmutató
Ez az útmutató feltételezi, hogy egy .NET Durable Functions 2.x projekttel kezd.
A projekt frissítése
Az első lépés a projekt izolált Azure Functions .NET-hez való frissítése. Ezután frissítse a Durable Functions NuGet-csomaghivatkozásait.
Régi:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
Új:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
A kód frissítése
Az izolált .NET-feldolgozók számára készült Durable Functions egy teljesen új csomag, amely különböző típusú és névterekkel rendelkezik. Emiatt szükség van a kód módosítására, de az API-k nagy része nem igényel módosításokat.
Host.json séma
A Durable Functions .NET izolált feldolgozójának és a Durable Functions 2.x-nek a sémája változatlan maradt, nincs szükség módosításokra.
Nyilvános API-módosítások
Ez a táblázat nem a módosítások teljes listája.
2.x | Izolált |
---|---|
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>() vagy bemenetet injektálhat paraméterként: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
DurableActivityContext |
Nincs egyenértékű |
DurableActivityContext.GetInput<T>() |
Bemenet injektálása paraméterként MyActivity([ActivityTrigger] T input) |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync , adja meg TaskOptions az újrapróbálkozással kapcsolatos részleteket tartalmazó paramétert. |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync , adja meg TaskOptions az újrapróbálkozással kapcsolatos részleteket tartalmazó paramétert. |
IDurableOrchestrationContext.CallHttpAsync |
TaskOrchestrationContext.CallHttpAsync |
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) |
TaskOrchestrationContext.CreateReplaySafeLogger<T>() vagy 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 |
Eltávolítva, hozzáadás FunctionContext bemeneti paraméterként |
IDurableEntityContext.HasState |
TaskEntityOperation.State.HasState |
IDurableEntityContext.BatchSize |
Eltávolítva |
IDurableEntityContext.BatchPosition |
Eltávolítva |
IDurableEntityContext.GetState |
TaskEntityOperation.State.GetState |
IDurableEntityContext.SetState |
TaskEntityOperation.State.SetState |
IDurableEntityContext.DeleteState |
TaskEntityOperation.State.SetState(null) |
IDurableEntityContext.GetInput |
TaskEntityOperation.GetInput |
IDurableEntityContext.Return |
Eltávolított. Metódus visszatérési értéke helyett. |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync . A konstruktor paramjai el lettek távolítva. |
Működésbeli változások
- A szerializálás alapértelmezett viselkedése a helyről
Newtonsoft.Json
a másikraSystem.Text.Json
változott. További információt itt talál.