Dela via


Ö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 till System.Text.Json. Mer information finns här.