Visão geral das versões do Durable Functions

As Funções Duráveis são uma extensão do Azure Functions e do Azure WebJobs que permitem que você escreva funções com estado em um ambiente sem servidor. A extensão gerencia estado, pontos de verificação e reinicializações para você. Se você ainda não estiver familiarizado com o Durable Functions, veja a documentação de visão geral.

Novos recursos na versão 2.x

Esta seção descreve os recursos do Durable Functions que são adicionados na versão 2.x.

Observação

Esta seção não se aplica às Durable Functions no trabalho isolado do dotnet. Para isso, veja a Visão geral dos processos isolados das Durables Functions.

Entidades duráveis

No Durable Functions 2.x, introduzimos um novo conceito de funções de entidade.

As funções de entidade definem operações para leitura e atualização de pequenas partes de estado, conhecidas como entidades duráveis. Como as funções de orquestrador, as funções de entidade são funções com um tipo de gatilho especial, o gatilho de entidade. Ao contrário das funções de orquestrador, as funções de entidade não têm nenhuma restrição de código específica. As funções de entidade também gerenciam o estado explicitamente, em vez de representar implicitamente o estado por meio do fluxo de controle.

Para saber mais, consulte o artigo de entidade duráveis.

HTTP Durável

No Durable Functions 2.x, introduzimos um novo recurso HTTP Durável que permite:

  • Chamar APIs HTTP diretamente de funções de orquestração (com algumas limitações documentadas).
  • Implementar a sondagem automática de status HTTP 202 do lado do cliente.
  • Suporte integrado para Identidades Gerenciadas do Azure.

Para saber mais, consulte o artigo de recursos HTTP.

Migrar da versão 1.x para a 2.x

Esta seção descreve como migrar o Durable Functions da versão 1.x para a versão 2.x para aproveitar os novos recursos.

Atualizar a extensão

Instale a versão 2.x mais recente da extensão de associações do Durable Functions em seu projeto.

JavaScript, Python e PowerShell

O Durable Functions 2.x está disponível a partir na versão 2.x do pacote de extensão do Azure Functions.

O suporte para Python no Durable Functions requer o Durable Functions 2.x ou superior.

Para atualizar a versão do pacote de extensão no projeto, abra host.jse atualize a seção para extensionBundle usar a versão 4.x ([4.*, 5.0.0)).

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.*, 5.0.0)"
    }
}

Observação

Se o Visual Studio Code estiver exibindo os modelos corretos depois que você alterar a versão do pacote de extensão, recarregue a janela executando o comando Developer: Reload Window (Ctrl+R no Windows e Linux, Command+R no macOS).

Java

O Durable Functions 2.x está disponível a partir na versão 4.x do pacote de extensão do Azure Functions. Você precisa usar o runtime do Azure Functions 4.0 para executar funções Java.

Para atualizar a versão do pacote de extensão no projeto, abra host.jse atualize a seção para extensionBundle usar a versão 4.x ([4.*, 5.0.0)).

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.*, 5.0.0)"
    }
}

.NET

Atualize seu projeto do .NET para usar a versão mais recente da extensão de associações do Durable Functions.

Para saber mais, consulte Registrar extensões de associação do Azure Functions.

Atualizar o código

O Durable Functions 2.x apresenta várias alterações interruptivas. Os aplicativos Durable Functions 1.x não são compatíveis com o Durable Functions 2.x sem alterações de código. Esta seção lista algumas das alterações que você deve fazer ao atualizar as funções da versão 1.x para a versão 2.x.

Host.json schema

O Durable Functions 2. x usa um novo host.json schema. As principais alterações da versão 1.x incluem:

  • "storageProvider" (e a subseção "azureStorage") para configuração específica de armazenamento.
  • "tracing" para configuração de registro em log e rastreamento.
  • "notifications" (e a subseção "eventGrid") para configuração de notificação da Grade de Eventos.

Consulte a documentação de referência de host.json do Durable Functions para obter detalhes.

Alterações de nome de hub de tarefas padrão

Na versão 1.x, se um nome de hub de tarefas não foi especificado no host.json, ele foi padronizado como "DurableFunctionsHub". Na versão 2.x, o nome do hub de tarefas padrão agora é derivado do nome do aplicativo de funções. Por isso, se você não tiver especificado um nome de Hub de tarefas ao atualizar para 2.x, o código estará operando com o novo hub de tarefas e todas as orquestrações em andamento não terão mais um aplicativo as processando. Para contornar isso, você pode definir explicitamente o nome do hub de tarefas para o padrão v1.x de "DurableFunctionsHub", ou pode seguir nossas diretrizes de implantação sem nenhum tempo de inatividade para obter detalhes sobre como lidar com alterações interruptivas para orquestrações em andamento.

Alterações de interface pública (somente .NET)

Na versão 1.x, os vários objetos de contexto com suporte do Durable Functions têm classes base abstratas destinadas a uso em teste de unidade. Como parte do Durable Functions 2.x, essas classes base abstratas são substituídas por interfaces.

A tabela a seguir representa as principais alterações:

1.x 2. x
DurableOrchestrationClientBase IDurableOrchestrationClient ou IDurableClient
DurableOrchestrationContext ou DurableOrchestrationContextBase IDurableOrchestrationContext
DurableActivityContext ou DurableActivityContextBase IDurableActivityContext
OrchestrationClientAttribute DurableClientAttribute

No caso em que uma classe base abstrata continha métodos virtuais, esses métodos virtuais foram substituídos por métodos de extensão definidos em DurableContextExtensions.

alterações do function.json

No Durable Functions 1.x, a associação de cliente de orquestração usa um type de orchestrationClient. A versão 2.x usa durableClient em vez disso.

Acionar alterações de evento

No Durable Functions 1.x, chamar a API acionar evento e especificar uma instância que não existia resultava em uma falha silenciosa. A partir da versão 2.x, acionar um evento para uma orquestração inexistente resulta em uma exceção.