Запущенная веб-работа Azure - определение момента остановки веб-работы
Я занимаюсь разработкой запущенного веб-задания, использующего TimerTrigger.
Перед остановкой веб-работы мне нужно удалить некоторые объекты, но я не знаю, как вызвать "остановку веб-работы".
Иметь NoAutomaticTrigger
Функция, я знаю, что я могу использовать класс WebJobsShutdownWatcher для обработки, когда веб-задание останавливается, но с запущенной работой мне нужна помощь...
Я посмотрел на расширяемые триггеры и связыватели с помощью Azure WebJobs SDK 1.1.0-alpha1.
Это хорошая идея, чтобы создать пользовательский триггер (StopTrigger), который использовал WebJobsShutdownWatcher
класс, чтобы запустить действие, прежде чем веб-работа прекращается?
2 ответа
ОК Ответ был в вопросе:
Да, я могу использовать класс WebJobsShutdownWatcher, потому что он имеет Register
функция, которая вызывается при отмене токена отмены, другими словами, когда веб-работа останавливается.
static void Main()
{
var cancellationToken = new WebJobsShutdownWatcher().Token;
cancellationToken.Register(() =>
{
Console.Out.WriteLine("Do whatever you want before the webjob is stopped...");
});
var host = new JobHost();
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
РЕДАКТИРОВАТЬ (на основе комментария Мэтью):
Если вы используете триггерные функции, вы можете добавить CancellationToken
параметр вашей подписи функции. Среда выполнения отменит этот токен, когда хост автоматически отключится, что позволит вашей функции получить уведомление.
public static void QueueFunction(
[QueueTrigger("QueueName")] string message,
TextWriter log,
CancellationToken cancellationToken)
{
...
if(cancellationToken.IsCancellationRequested) return;
...
}
Недавно я пытался выяснить, как это сделать без SDK WebJobs, который содержит WebJobShutdownWatcher, это то, что я обнаружил.
Что делает базовая среда выполнения (и что WebJobsShutdownWatcher
упомянутые выше проверки), создает локальный файл в месте, указанном переменной среды %WEBJOBS_SHUTDOWN_FILE%
, Если этот файл существует, это, по сути, сигнал времени выполнения для веб-задания, что он должен завершить работу в течение настраиваемого периода ожидания (по умолчанию 5 секунд для непрерывных заданий, 30 для запускаемых заданий), в противном случае время выполнения убьет задание.
В результате, если вы не используете Azure WebJobs SDK, который содержит WebJobsShutdownWatcher, как описано выше, вы все равно можете добиться постепенного завершения работы веб-задания Azure, отслеживая файл завершения работы с интервалом, меньшим, чем настроенный период ожидания.
Дополнительные сведения, в том числе порядок настройки периода ожидания, описаны здесь: https://github.com/projectkudu/kudu/wiki/WebJobs.