Часто ли исключается очередь из хранилища 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
    }

При перемещении кода сюда у вас не будет проблем с интервалами, потому что он сразу обрабатывается триггером.

Другие вопросы по тегам