#azure #azure-functions #azure-durable-functions
#лазурный #azure-функции #azure-durable-функции
Вопрос:
Мы хотим перенести все выполняемые в настоящее время долговременные функции из функционального приложения в недавно разработанное функциональное приложение.
Состояния активных долговременных функций хранятся в таблице. Это означает, что мы просто можем запустить новую долговременную функцию, и она сможет определить ее состояние. Но это означает, что мы должны остановить множество выполняемых в настоящее время долговременных функций.
Наша идея состояла в том, чтобы удалить таблицы «DurableFunctionsHubHistory» и «DurableFunctionsHubInstances» в связанной учетной записи хранения. С этой учетной записью хранилища не связаны другие функциональные приложения, использующие долговременные функции.
Безопасно ли это делать или есть лучший способ остановить большое количество долговременных функций?
Ответ №1:
вопрос в том, хотите ли вы остановить функции или функции, запущенные в очереди? если вы просто хотите остановить все существующие функции и использовать новые перенесенные функции
быстрый способ — использовать функции отключения, вы можете сделать это в Azure Portal или CLI с приведенным ниже примером
az functionapp config appsettings set --name <myFunctionApp>
--resource-group <myResourceGroup>
--settings AzureWebJobs.QueueTrigger.Disabled=false
у вас также могут быть некоторые вспомогательные долговременные функции, которые помогут вам в состоянии большого количества текущих функций, если вам нужно их остановить.
var RunningStateFilter = new OrchestrationStatusQueryCondition()
{
RuntimeStatus = new[]
{
OrchestrationRuntimeStatus.Running
},
CreatedTimeFrom = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)),
CreatedTimeTo = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)),
PageSize = 100
};
OrchestrationStatusQueryResult result = await client.ListInstancesAsync(RunningStateFilter, CancellationToken.None);
foreach (DurableOrchestrationStatus instance in result.DurableOrchestrationState)
{
NoOfInstance = 1;
await client.TerminateAsync(instance.InstanceId, reason);
}
Комментарии:
1. Но это приведет к запуску долговременных функций. Мне не нравится идея запуска большого количества экземпляров, которые никогда не будут завершены. Я чувствую, что это может укусить меня при следующей миграции или во время общей работы по обслуживанию…
2. вы можете создать несколько вспомогательных функций, чтобы отслеживать их на этом пути, я привел несколько примеров кодов, чтобы помочь вам в этом, вы также можете поискать github.com/scale-tone/DurableFunctionsMonitor чтобы понять, насколько это жизнеспособно для вас, может ли это помочь и вам.
3. Извините, ваш последний ответ пришел ко мне слишком поздно. В итоге я сделал то, что предложил, и удалил таблицы «DurableFunctionsHubHistory» и «DurableFunctionsHubInstances» и снова создал их пустыми. Это сработало, как ожидалось, и я пока не обнаружил никаких проблем.