Visão geral das Durable Functions no trabalhador isolado .NET

O trabalhador isolado .NET permite executar Durable Functions em qualquer versão .NET suportada, independentemente do processo host do Azure Functions. Este modelo dá-lhe controlo total sobre a injeção de dependências, middleware e versionamento do .NET.

Neste artigo, você aprende sobre:

Benefits

O trabalhador isolado do .NET oferece várias vantagens para as aplicações Durable Functions.

  • Versionamento independente do .NET: Execute a sua aplicação em .NET 8, .NET 9 ou versões posteriores sem esperar que o anfitrião das Funções atualize.
  • Injeção total de dependências: Utilize padrões .NET IServiceCollection / IServiceProvider nas suas atividades.
  • Middleware personalizado: Adicione preocupações de corte transversal como registo, autenticação ou tratamento de erros através do pipeline de middleware worker Functions.
  • Injeção direta de entrada: A entrada de orquestração pode ser injetada diretamente na assinatura do método de gatilho: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input).
  • Chamadas fortemente tipadas (pré-visualização): Com o pacote gerador de código-fonte, obtém-se invocações seguras em tempo de compilação para atividades e suborquestrações. Para mais informações, consulte Geradores de Fonte e sintaxe baseada em classes (pré-visualização).

Para a lista completa dos benefícios do trabalhador isolado, veja Benefícios do modelo do trabalhador isolado.

Introdução

Para criar uma aplicação Durable Functions usando o trabalhador isolado .NET:

  1. Instale o pacote NuGet necessário:

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />
    
  2. Uso TaskOrchestrationContext para orquestradores e DurableTaskClient para operações com clientes. Veja o tutorial de início rápido para uma explicação completa.

Principais diferenças em relação ao processo em curso

Se está a migrar de ou a comparar com o modelo em processo, aqui estão as principais diferenças:

Área Em andamento .NET trabalhador isolado
Pacote NuGet Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Contexto do orquestrador IDurableOrchestrationContext TaskOrchestrationContext
Tipo de cliente IDurableOrchestrationClient DurableTaskClient
Contexto da atividade IDurableActivityContext TaskActivityContext
Espaço de nomes Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.DurableTask / Microsoft.Azure.Functions.Worker
Registo seguro por replay context.CreateReplaySafeLogger(log) context.CreateReplaySafeLogger("Name")

Para um guia de migração abrangente que aborda a configuração do projeto, referências de pacotes, mapeamentos de API, diferenças comportamentais e questões comuns, veja Migrar do modelo em processo para o modelo de trabalhador isolado.

Geradores de fonte e sintaxe baseada em classes (pré-visualização)

O pacote gerador de fonte oferece uma alternativa às Funções Duráveis baseadas em funções. Em vez de métodos estáticos com atributos [Function], escrevem-se classes fortemente tipadas que herdam do SDK Durável.

Pré-requisitos

Adicione o pacote NuGet do gerador de origem ao seu projeto:

<PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0" />

O pacote oferece duas capacidades:

  • Atividades e orquestrações baseadas em classes — classes fortemente tipadas que herdam TaskOrchestrator<TInput, TOutput> e TaskActivity<TInput, TOutput>.
  • Métodos de extensão fortemente tipados — métodos seguros em tempo de compilação para invocar suborquestrações e atividades. Estes métodos de extensão também funcionam a partir de orquestrações baseadas em funções.

Example

O exemplo seguinte mostra uma orquestração baseada em classes que chama uma atividade baseada em classes:

using Microsoft.DurableTask;

[DurableTask]
public class MyOrchestration : TaskOrchestrator<string, string>
{
    public override async Task<string> RunAsync(TaskOrchestrationContext context, string input)
    {
        return await context.CallActivityAsync<string>(nameof(MyActivity), input);
    }
}

[DurableTask]
public class MyActivity : TaskActivity<string, string>
{
    public override Task<string> RunAsync(TaskActivityContext context, string input)
    {
        return Task.FromResult($"Processed: {input}");
    }
}

Tip

Para orquestrações ou atividades que não necessitem de entrada ou saída funcional, use object? como argumento genérico do tipo (por exemplo, TaskOrchestrator<object?, object?>). Este padrão permite usar injeção de dependências (por exemplo, ILogger<T>) em atividades, mantendo o modelo baseado em classes.

Entidades duráveis

Entidades duráveis são suportadas no trabalhador isolado .NET. Para mais informações, consulte o guia do programador.

Passos seguintes