Обзор Устойчивые функции в изолированной рабочей роли .NET
В этой статье представлен обзор Устойчивые функции в изолированной рабочей роли .NET. Изолированная рабочая роль позволяет приложению Устойчивые функции работать в версии .NET, отличной от версии Функции Azure узла.
Зачем использовать Устойчивые функции в изолированной рабочей роли .NET?
Использование этой модели позволяет получить все большие преимущества, которые поставляются с Функции Azure изолированным рабочим процессом .NET. Дополнительные сведения см. в разделе "Преимущества изолированной рабочей модели". Кроме того, этот новый пакет SDK включает некоторые новые функции.
Улучшения функций по сравнению с Устойчивые функции процесса
- Входные данные оркестрации можно внедрить напрямую:
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
- Поддержка строго типизированных вызовов и действий на основе классов и оркестрации (ПРИМЕЧАНИЕ: в предварительной версии. Дополнительные сведения см . здесь.)
- Плюс все преимущества изолированной рабочей роли .NET Функции Azure.
Исходный генератор и действия на основе классов и оркестрации
Требование: добавление <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" />
в проект.
Добавив пакет генератора источника, вы получите доступ к двум новым функциям:
- Действия и оркестрации на основе классов, альтернативный способ записи Устойчивые функции. Вместо "на основе функций" вы пишете строго типизированные классы, которые наследуют типы от устойчивого пакета SDK.
- Строго типизированные методы расширения для вызова вложенных оркестрации и действий. Эти методы расширения также можно использовать из действий и оркестрации на основе функций.
Пример на основе функций
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);
}
}
Пример на основе классов
[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);
}
}
Устойчивые сущности
Устойчивые сущности поддерживаются в изолированной рабочей роли .NET. Ознакомьтесь с руководством разработчика.
Руководство по миграции
В этом руководстве предполагается, что вы начинаете с проекта .NET Устойчивые функции 2.x.
Обновление проекта
Первым шагом является обновление проекта до Функции Azure изолированной .NET. Затем обновите ссылки на пакет NuGet Устойчивые функции.
Старый:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
Новая.
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
Обновление кода
Устойчивые функции для изолированной рабочей роли .NET — это совершенно новый пакет с различными типами и пространствами имен. В результате в коде требуются необходимые изменения, но многие API-интерфейсы не соответствуют необходимым изменениям.
Схема Host.json
Схема изолированной рабочей роли .NET Устойчивые функции и Устойчивые функции 2.x не изменилась, изменения не должны быть необходимы.
Изменения общедоступного API
Эта таблица не является исчерпывающим списком изменений.
2.x | Изоляция |
---|---|
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>() или ввести входные данные в качестве параметра: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
DurableActivityContext |
Нет эквивалента |
DurableActivityContext.GetInput<T>() |
Внедрение входных данных в качестве параметра MyActivity([ActivityTrigger] T input) |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync , включите TaskOptions параметр с подробными сведениями о повторных попытках. |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync , включите TaskOptions параметр с подробными сведениями о повторных попытках. |
IDurableOrchestrationContext.CallHttpAsync |
TaskOrchestrationContext.CallHttpAsync |
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) |
TaskOrchestrationContext.CreateReplaySafeLogger<T>() или 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 |
Удалено, добавьте FunctionContext в качестве входного параметра |
IDurableEntityContext.HasState |
TaskEntityOperation.State.HasState |
IDurableEntityContext.BatchSize |
Удаленные |
IDurableEntityContext.BatchPosition |
Удаленные |
IDurableEntityContext.GetState |
TaskEntityOperation.State.GetState |
IDurableEntityContext.SetState |
TaskEntityOperation.State.SetState |
IDurableEntityContext.DeleteState |
TaskEntityOperation.State.SetState(null) |
IDurableEntityContext.GetInput |
TaskEntityOperation.GetInput |
IDurableEntityContext.Return |
Удалено. Вместо этого используется возвращаемое значение метода. |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync . Удалены параметры конструктора. |
IDurableOrchestrationClient.GetStatusAsync |
DurableTaskClient.GetInstanceAsync |
Изменение поведения
- Поведение сериализации по умолчанию изменилось с
Newtonsoft.Json
System.Text.Json
. Для получения дополнительных сведений см. здесь.