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ásikra System.Text.Jsonváltozott. További információt itt talál.