Sdílet prostřednictvím


Přehled Durable Functions pro izolovaného pracovníka v .NET

Tento článek obsahuje přehled Durable Functions v izolovaném pracovním procesu .NET. Izolovaný pracovní proces umožňuje, aby aplikace Durable Functions běžela na jiné verzi .NET než na hostiteli Azure Functions.

Proč používat Durable Functions v izolovaném pracovním procesu .NET?

Pomocí tohoto modelu získáte všechny skvělé výhody, které jsou součástí izolovaného pracovního procesu Azure Functions .NET. Další informace naleznete v tématu Výhody izolovaného modelu pracovního procesu. Kromě toho tato nová sada SDK obsahuje některé nové funkce.

Vylepšení funkcí spuštěných v rámci procesu Durable Functions

  • Vstup orchestrace může být přímo vložen: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
  • Podpora silně typovaných volání a aktivit a orchestrace založených na třídách (POZNÁMKA: v ukázkové verzi. Další informace najdete tady.)
  • Navíc všechny výhody izolovaného pracovního procesu Azure Functions .NET.

Generátor zdrojů a aktivity a orchestrace založené na třídách

Požadavek: přidejte <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" /> do projektu.

Přidáním zdrojového balíčku generátoru získáte přístup ke dvěma novým funkcím:

  • Aktivity a orchestrace založené na třídách, alternativní způsob psaní Durable Functions. Místo "funkčních" napíšete třídy silného typu, které dědí typy z Durable SDK.
  • Metody rozšíření s důkladným typováním pro provádění dílčích orchestrací a aktivit Tyto metody rozšíření lze použít také z aktivit a orchestrací založených na funkcích.

Příklad založený na funkcích

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);
    }
}

Příklad založený na třídách

[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);
    }
}

Odolné entity

Odolné entity jsou podporovány izolovaným .NET workerem. Další informace najdete v příručce pro vývojáře.

Průvodce migrací

Tento proces předpokládá, že začínáte s projektem .NET Durable Functions 2.x běžícím v procesu s hostitelem Functions.

Migrace projektu

Prvním krokem je migrace projektu .NET do izolovaného pracovního procesu.

Referenční informace k aktualizačnímu balíčku

Po migraci aplikace tak, aby používala proces izolovaného pracovního procesu, musíte aktualizovat balíček NuGet Durable Functions tak, aby odkazoval na balíček specifický pro izolovaný pracovní proces, například v tomto příkladu:

Starý:

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>

Nová:

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>

Aktualizace kódu

Durable Functions pro izolovaný pracovní proces .NET je zcela nový balíček s různými typy a obory názvů. Výsledkem jsou nutné změny ve vašem kódu, ale mnoho rozhraní API nevyžaduje žádné úpravy.

schéma Host.json

Schéma pro izolovaný pracovní proces Durable Functions .NET a Durable Functions 2.x zůstalo stejné, žádné změny by neměly být potřeba.

Změny veřejného rozhraní API

Tato tabulka není vyčerpávajícím seznamem změn.

2.x Izolovaný režim
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>() nebo vložte vstup jako parametr: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
DurableActivityContext Žádný ekvivalent
DurableActivityContext.GetInput<T>() Vložení vstupu jako parametru MyActivity([ActivityTrigger] T input)
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync, zahrňte TaskOptions parametr s podrobnostmi o opakování.
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync, zahrňte TaskOptions parametr s podrobnostmi o opakování.
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() nebo 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 Odebrání, přidání FunctionContext jako vstupního parametru
IDurableEntityContext.HasState TaskEntityOperation.State.HasState
IDurableEntityContext.BatchSize Odstraněno
IDurableEntityContext.BatchPosition Odstraněno
IDurableEntityContext.GetState TaskEntityOperation.State.GetState
IDurableEntityContext.SetState TaskEntityOperation.State.SetState
IDurableEntityContext.DeleteState TaskEntityOperation.State.SetState(null)
IDurableEntityContext.GetInput TaskEntityOperation.GetInput
IDurableEntityContext.Return Odstraněný. Místo toho se použila návratová hodnota metody.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Parametry konstruktoru byly odebrány.
IDurableOrchestrationClient.GetStatusAsync DurableTaskClient.GetInstanceAsync

Změny chování

  • Výchozí chování serializace se změnilo z Newtonsoft.Json na System.Text.Json. Další informace najdete tady.