Partilhar via


Visão geral das funções duráveis no trabalhador isolado do .NET

Este artigo é uma visão geral das funções duráveis no trabalhador isolado do .NET. O trabalhador isolado permite que seu aplicativo Durable Functions seja executado em uma versão .NET diferente da do host do Azure Functions.

Por que usar funções duráveis no trabalhador isolado do .NET?

O uso desse modelo permite que você obtenha todos os grandes benefícios que vêm com o processo de trabalho isolado do Azure Functions .NET. Para obter mais informações, consulte Benefícios do modelo de trabalhador isolado. Além disso, este novo SDK inclui alguns novos recursos.

Melhorias de recursos em relação às funções duráveis em processo

  • A entrada de orquestração pode ser injetada diretamente: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
  • Suporte para chamadas fortemente tipadas e atividades e orquestrações baseadas em classe (NOTA: na pré-visualização. Para mais informações, consulte aqui.)
  • Além de todos os benefícios do trabalhador isolado do Azure Functions .NET.

Gerador de código-fonte e atividades e orquestrações baseadas em classe

Requisito: adicionar <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" /> ao seu projeto.

Ao adicionar o pacote gerador de código-fonte, você tem acesso a dois novos recursos:

  • Atividades e orquestrações baseadas em classes, uma maneira alternativa de escrever funções duráveis. Em vez de "baseado em funções", você escreve classes fortemente tipadas, que herdam tipos do SDK durável.
  • Métodos de extensão fortemente tipados para invocar suborquestrações e atividades. Esses métodos de extensão também podem ser usados a partir de atividades e orquestrações "baseadas em funções".

Exemplo baseado em função

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

Exemplo baseado em classe

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

Entidades duradouras

As entidades duráveis são suportadas no trabalhador isolado do .NET. Consulte o guia do desenvolvedor.

Guia de migração

Este guia pressupõe que você esteja começando com um projeto .NET Durable Functions 2.x.

Atualize o seu projeto

A primeira etapa é atualizar seu projeto para o Azure Functions .NET isolado. Em seguida, atualize as referências do pacote NuGet do Durable Functions.

Velho:

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

Novo:

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

Atualize o seu código

Durable Functions for .NET isolated worker é um pacote totalmente novo com diferentes tipos e namespaces. Como resultado, há alterações necessárias no seu código, mas muitas das APIs se alinham sem a necessidade de alterações.

Esquema Host.json

O esquema para Durable Functions .NET trabalhador isolado e Durable Functions 2.x permaneceu o mesmo, nenhuma alteração deve ser necessária.

Alterações na API pública

Esta tabela não é uma lista exaustiva de alterações.

2.x Isolado
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>() ou injetar entrada como parâmetro: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
DurableActivityContext Sem equivalente
DurableActivityContext.GetInput<T>() Injetar entrada como parâmetro MyActivity([ActivityTrigger] T input)
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync, incluir TaskOptions parâmetro com detalhes de repetição.
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync, incluir TaskOptions parâmetro com detalhes de repetição.
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() ou 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 Removido, adicionar FunctionContext como um parâmetro de entrada
IDurableEntityContext.HasState TaskEntityOperation.State.HasState
IDurableEntityContext.BatchSize Removido
IDurableEntityContext.BatchPosition Removido
IDurableEntityContext.GetState TaskEntityOperation.State.GetState
IDurableEntityContext.SetState TaskEntityOperation.State.SetState
IDurableEntityContext.DeleteState TaskEntityOperation.State.SetState(null)
IDurableEntityContext.GetInput TaskEntityOperation.GetInput
IDurableEntityContext.Return Removidos. Valor de retorno do método usado em vez disso.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Params do construtor removidos.
IDurableOrchestrationClient.GetStatusAsync DurableTaskClient.GetInstanceAsync

Mudanças comportamentais

  • O comportamento padrão de serialização foi alterado de Newtonsoft.Json para System.Text.Json. Para obter mais informações, veja aqui.