Все,Уведомление при непрерывной Azure WebJob останавливается для заданий типа NoAutomaticTrigger
Я проникаю существующий код Worker Role на Azure Web работу. Я пытаюсь использовать WebJob SDK (1.0), чтобы у меня была полная интеграция с Azure Web Site.
Мой трудно, что JobHost не дружат с рабочими местами, которые находятся вне его обычно Атрибут на основе вариантов Invoke (Очереди, Blobs и т.д.)
У меня уже есть стандартный код, который я не могу изменить, чтобы слушать Azure Очереди/Темы и т. Д., Поэтому я не могу использовать код WebJob для этого.
Поэтому мне нужно использовать метод WebJob вызова:
var cancelTokenSource = new CancellationTokenSource();
var onStartMethod = typeof(Program).GetMethod("OnStart", BindingFlags.Static | BindingFlags.Public);
host.CallAsync(onStartMethod, cancelTokenSource.Token)
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
NB: Я использую свой собственный CallAsync, как и все советы использовать ConfigureAwait (ложь) при использовании библиотеки, но внутренности JobHost Безразлично» t делаю это, поэтому я копирую сам код вызова, но с ConfigureAwait. Насколько я могу судить, токен отмены не делает ничего в JobHost.
Моя проблема в том, что мне тогда необходимо вызвать host.RunAndBlock(); чтобы прекратить выполнение задания, что хорошо, но тогда мне нужно запустить некоторую очистку. Я не могу сделать новый вызов «CallAsync» с помощью метода OnStop, поскольку хост уже отменен, поэтому все, что я могу сделать, это сделать прямой вызов моего метода OnStop. К сожалению, я теряю возможность писать в журнал WebSite через предоставленный класс TextWriter.
Я думаю, что мне нужно, чтобы JobHost вызывал мой метод в RunAndBlock, поэтому я могу подобрать маркер отмены, который был запущен, когда хост выключился, а затем выполнить мой код очистки .... но там не похоже на это.
Есть ли очевидный способ, которым я не хватает? JobHost кажется очень бедными в сценариях обработки вне это нормы :(
Мой сценарий заключается в том, что начало задания Я подписываюсь на очереди/темы, используя свой собственный код адаптера для Azure Service Bus (т.е. я не могу использовать встроенный механизм для этого), тогда мне нужно блокировать ожидание сообщения, а затем, когда WebJob остановлен, мне нужно перехватить это и вызвать логику «Отменить подписку». Мне сложно работать (а), как получить токен отмены, используемый WebJob при выключении (это нигде не отображается) или (б) перехватить остановку, поскольку нет события, поднятого, что я могу подключиться к , – GrahamB
Вы можете проверить, когда WebJobs останавливается/перезапускается, следуя коду http://blog.amitapple.com/post/2014/05/webjobs-graceful-shutdown/ –