Durable Functions: mapeamento API em processo para trabalhador isolado

Esta referência fornece um mapeamento abrangente entre o SDK em processo (2.x) e o SDK trabalhador isolado para Durable Functions. Use esta página juntamente com o guia de migração ao atualizar o seu código.

APIs de cliente

Em processo (2.x) Trabalhador isolado
IDurableOrchestrationClient DurableTaskClient
IDurableOrchestrationClient.StartNewAsync DurableTaskClient.ScheduleNewOrchestrationInstanceAsync
IDurableOrchestrationClient.GetStatusAsync DurableTaskClient.GetInstanceAsync
IDurableOrchestrationClient.ListInstancesAsync DurableTaskClient.GetAllInstancesAsync
IDurableOrchestrationClient.TerminateAsync DurableTaskClient.TerminateInstanceAsync
IDurableOrchestrationClient.SuspendAsync DurableTaskClient.SuspendInstanceAsync
IDurableOrchestrationClient.ResumeAsync DurableTaskClient.ResumeInstanceAsync
IDurableOrchestrationClient.RaiseEventAsync DurableTaskClient.RaiseEventAsync
IDurableOrchestrationClient.RewindAsync DurableTaskClient.RewindInstanceAsync
IDurableOrchestrationClient.RestartAsync DurableTaskClient.RestartAsync
IDurableOrchestrationClient.PurgeInstanceHistoryAsync DurableTaskClient.PurgeInstanceAsync ou PurgeAllInstancesAsync
IDurableOrchestrationClient.CreateCheckStatusResponse DurableTaskClient.CreateCheckStatusResponseAsync (método de extensão, toma HttpRequestData)
IDurableOrchestrationClient.WaitForCompletionOrCreateCheckStatusResponseAsync DurableTaskClient.WaitForCompletionOrCreateCheckStatusResponseAsync (método de extensão, timeout substituído por CancellationToken)
IDurableOrchestrationClient.CreateHttpManagementPayload DurableTaskClient.CreateHttpManagementPayload (método de extensão)
DurableOrchestrationStatus OrchestrationMetadata
DurableOrchestrationStatus.History Removido do objeto de estado. Utilize DurableTaskClient.GetOrchestrationHistoryAsync em substituição.
PurgeHistoryResult PurgeResult
OrchestrationStatusQueryCondition OrchestrationQuery
OrchestrationStatusQueryResult AsyncPageable<OrchestrationMetadata>

APIs de cliente removidas

As seguintes APIs em processo não têm equivalentes no trabalhador SDK isolado:

API removida Workaround
IDurableOrchestrationClient.MakeCurrentAppPrimaryAsync Sem equivalente
IDurableOrchestrationClient.GetStatusAsync(IEnumerable<string>) Usar GetInstanceAsync num ciclo ou GetAllInstancesAsync com um filtro de consulta
IDurableOrchestrationClient.PurgeInstanceHistoryAsync(IEnumerable<string>) Uso PurgeInstanceAsync em loop ou PurgeAllInstancesAsync com filtro
Sobrecargas entre centros de tarefas (RaiseEventAsync, SignalEntityAsync, ReadEntityStateAsync com/taskHubNameconnectionName ) Apenas operações no mesmo centro de tarefas são suportadas

APIs de clientes de entidades

Em processo (2.x) Trabalhador isolado
IDurableEntityClient.SignalEntityAsync DurableTaskClient.Entities.SignalEntityAsync
IDurableEntityClient.ReadEntityStateAsync DurableTaskClient.Entities.GetEntityAsync
IDurableEntityClient.ListEntitiesAsync DurableTaskClient.Entities.GetAllEntitiesAsync
IDurableEntityClient.CleanEntityStorageAsync DurableTaskClient.Entities.CleanEntityStorageAsync (usa CleanEntityStorageRequest objeto em vez de parâmetros bool)

APIs de contexto de orquestração

Em processo (2.x) Trabalhador isolado
IDurableOrchestrationContext TaskOrchestrationContext
IDurableOrchestrationContext.InstanceId TaskOrchestrationContext.InstanceId
IDurableOrchestrationContext.Name TaskOrchestrationContext.Name
IDurableOrchestrationContext.CurrentUtcDateTime TaskOrchestrationContext.CurrentUtcDateTime
IDurableOrchestrationContext.IsReplaying TaskOrchestrationContext.IsReplaying
IDurableOrchestrationContext.NewGuid TaskOrchestrationContext.NewGuid
IDurableOrchestrationContext.GetInput<T>() TaskOrchestrationContext.GetInput<T>() ou injetar entrada como parâmetro: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
IDurableOrchestrationContext.SetOutput Removido. Utilize o valor de retorno da função orquestradora.
IDurableOrchestrationContext.CallActivityAsync TaskOrchestrationContext.CallActivityAsync
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync com um TaskOptions parâmetro para detalhes de retentativa
IDurableOrchestrationContext.CallSubOrchestratorAsync TaskOrchestrationContext.CallSubOrchestratorAsync
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync com um TaskOptions parâmetro para detalhes de retentativa
IDurableOrchestrationContext.ContinueAsNew TaskOrchestrationContext.ContinueAsNew (ver alterações comportamentais para diferenças padrão)
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateTimer<T>(DateTime, T, CancellationToken) TaskOrchestrationContext.CreateTimer(DateTime, CancellationToken). Parâmetro de estado removido.
IDurableOrchestrationContext.WaitForExternalEvent(string) (não genérico) Removido. Utilize WaitForExternalEvent<T>(string, CancellationToken).
IDurableOrchestrationContext.WaitForExternalEvent<T>(string, TimeSpan, T) (com defaultValue) Removido. Usa WaitForExternalEvent<T>(string, TimeSpan, CancellationToken), que lança TaskCanceledException em caso de timeout.
IDurableOrchestrationContext.ParentInstanceId TaskOrchestrationContext.Parent.InstanceId
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() ou TaskOrchestrationContext.CreateReplaySafeLogger(string)
IDurableOrchestrationContext.CreateEntityProxy<T> Removido. Use Entities.CallEntityAsync ou Entities.SignalEntityAsync diretamente.
IDurableOrchestrationContext.CallEntityAsync TaskOrchestrationContext.Entities.CallEntityAsync
IDurableOrchestrationContext.SignalEntity TaskOrchestrationContext.Entities.SignalEntityAsync
IDurableOrchestrationContext.LockAsync TaskOrchestrationContext.Entities.LockEntitiesAsync
IDurableOrchestrationContext.IsLocked TaskOrchestrationContext.Entities.InCriticalSection()
RetryOptions TaskOptions com TaskRetryOptions
DurableActivityContext Sem equivalente
DurableActivityContext.GetInput<T>() Inserir a entrada como parâmetro: MyActivity([ActivityTrigger] T input)
DurableHttpRequest (Espaço de nomes WebJobs) DurableHttpRequest (Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http namespace)
DurableHttpResponse (Espaço de nomes WebJobs) DurableHttpResponse (Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http namespace)

APIs de entidades

Em processo (2.x) Trabalhador isolado
IDurableEntityContext TaskEntityContext
IDurableEntityContext.EntityName TaskEntityContext.Id.Name
IDurableEntityContext.EntityKey TaskEntityContext.Id.Key
IDurableEntityContext.OperationName TaskEntityOperation.Name
IDurableEntityContext.FunctionBindingContext Removido. Adicionar FunctionContext como parâmetro de entrada.
IDurableEntityContext.HasState TaskEntityOperation.State.HasState
IDurableEntityContext.GetState TaskEntityOperation.State.GetState
IDurableEntityContext.SetState TaskEntityOperation.State.SetState
IDurableEntityContext.DeleteState TaskEntityOperation.State.SetState(null)
IDurableEntityContext.GetInput TaskEntityOperation.GetInput
IDurableEntityContext.Return Removido. Use o valor de retorno do método em vez disso.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity. Os sinais agendados usam SignalEntityOptions.SignalTime em vez de sobrecarga de parâmetro DateTime.
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration. O ID da instância é definido usando StartOrchestrationOptions.InstanceId, em vez de um parâmetro de string.
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Parâmetros do construtor removidos; use DI padrão em vez disso.
IDurableEntityContext.BatchSize Removed
IDurableEntityContext.BatchPosition Removed

Mudanças comportamentais

Revise estas alterações de comportamento disruptivas antes de testar a sua aplicação migrada.

Alteração do padrão de serialização

O serializador padrão mudou de Newtonsoft.Json para System.Text.Json. Para opções de configuração, veja Serialização e persistência em Durable Functions.

Aviso

ContinueAsNew mudança padrão: O preserveUnprocessedEvents parâmetro padrão mudou de false (2.x) para true (isolado). Se a sua orquestração usar ContinueAsNew e depender de que eventos não processados sejam descartados, passe preserveUnprocessedEvents: false explicitamente.

Note

Alteração do padrão RestartAsync: O restartWithNewInstanceId padrão do parâmetro mudou de true (2.x) para false (isolado). Se o seu código chamar RestartAsync e depender de ser gerado um novo ID de instância, passe explicitamente restartWithNewInstanceId: true.

Outras alterações comportamentais

  • Remoção de proxy de entidade: CreateEntityProxy<T> e as sobrecargas de delegados SignalEntityAsync<TEntityInterface>(Action<T>) tipados não estão disponíveis no trabalhador isolado. Ligue Entities.CallEntityAsync ou Entities.SignalEntityAsync diretamente usando nomes de operações em formato de string em vez de usar interfaces proxy tipadas.
  • WaitForCompletionOrCreateCheckStatusResponseAsync: O timeout parâmetro foi removido. Usa um CancellationToken com um tempo limite de cancelamento em vez disso.
  • Operações de cross-task-hub removidas: As sobrecargas em processo que aceitavam taskHubName os parâmetros e connectionName não estão disponíveis no trabalhador isolado. Apenas operações no mesmo centro de tarefas são suportadas.
  • Operações em lote por ID removidas: As operações em processo GetStatusAsync(IEnumerable<string>) e PurgeInstanceHistoryAsync(IEnumerable<string>) as sobrecargas não estão disponíveis. Use GetAllInstancesAsync com um OrchestrationQuery filtro ou chame GetInstanceAsync/PurgeInstanceAsync individualmente.
  • Histórico de orquestração transferido: DurableOrchestrationStatus.History (o incorporado JArray) já não faz parte do objeto de estado. Usa a API separada DurableTaskClient.GetOrchestrationHistoryAsync .
  • Parágrafos construtores Entity DispatchAsync removidos: As classes de entidade são ativadas através da injeção padrão de dependências. Registe as dependências da sua entidade em Program.cs.
  • O filtro de consulta da entidade muda: EntityQuery.EntityName é substituído por EntityQuery.InstanceIdStartsWith, e EntityQuery.IncludeDeleted é substituído por EntityQuery.IncludeTransient.
  • Mudança de assinatura CleanEntityStorageAsync: Aceita um CleanEntityStorageRequest objeto com RemoveEmptyEntities propriedades e ReleaseOrphanedLocks em vez de parâmetros bool.
  • Novas APIs no trabalhador isolado: DurableTaskClient.GetOrchestrationHistoryAsync e no TaskOrchestrationContext.GetFunctionContext() método de extensão não têm equivalente em processo.