Часто ли исключается очередь из хранилища Azure без запуска нескольких экземпляров задания cron?
У меня довольно типичная проблема: у меня есть приложение, в которое я хочу отправлять электронные письма /SMS-сообщения. Для этого я использую сторонние API (Mandrill и GatewayAPI). Обычно это быстро, но некоторые из моих сообщений большие, и их отправка займет некоторое время. Вот почему я хочу переместить его в другую систему.
Мой план состоял в том, чтобы сделать простой Azure Web Job
чтение из Azure message queue
это выполняется очень часто (т. е. 15 секунд), чтобы убедиться, что все новые сообщения отправляются довольно быстро.
Мой вопрос: это проблема, если моя работа иногда занимает больше времени, чем интервал? И если так, есть ли что-то очевидное в моем дизайне, которое имеет недостатки (например, использование очереди сообщений вместе с веб-заданием с небольшим интервалом)?
(Я надеюсь, что это не рассматривается как вопрос, основанный на мнении - это действительно не так - у меня есть реальная проблема с тем, как запрограммировать эту настройку)
1 ответ
Что вам нужно сделать, это подписаться на триггер для определенной очереди.
Это действительно просто. Когда вы создаете новое веб-задание Azure на основе стандартного шаблона, вы получаете следующую функцию внутри Functions.cs
который добавлен по умолчанию:
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
public static void ProcessQueueMessage([QueueTrigger("QUEUENAME")] string message, TextWriter log)
{
// your code
}
При перемещении кода сюда у вас не будет проблем с интервалами, потому что он сразу обрабатывается триггером.