Как мне автоматически запустить очередь Azure?

StackOverflow https://stackoverflow.com/questions/1602070

  •  05-07-2019
  •  | 
  •  

Вопрос

Я хочу создать приложение Azure, которое имеет две рабочие роли и НЕ имеет веб-ролей.Когда рабочие роли запускаются впервые, я хочу, чтобы ТОЛЬКО ОДНА из ролей выполняла следующее за один раз:

  • Скачать и разбираем мастер-файл, а затем поставить в очередь несколько "дочерних задач" на основе содержимое главного файла
  • Поставьте в очередь "дочернюю" задачу загрузки одного основного файла для запуска на следующий день

Затем каждая из "дочерних" задач будет выполняться обоими рабочими до тех пор, пока очередь задач не будет исчерпана.Думайте обо всем этом как о "заправке насоса".

Такого рода вещи действительно просты, если я добавлю первую "главную" задачу вручную в очередь, вызвав веб-роль, но, похоже, это действительно сложно сделать в режиме автозапуска.

Мы были бы очень признательны за любую помощь в этом отношении!

Спасибо.....

Это было полезно?

Решение

Одна из возможностей:вместо вызова веб-роли просто загрузите очередь напрямую.(Похоже, это приложение такого типа, которое вы захотите автоматически запустить для выполнения некоторой работы, а затем снова закрыть...если вы автоматизируете это, автоматизировать загрузку очереди также должно быть тривиально.)

(Возможно) лучший вариант:Используйте какой-нибудь механизм блокировки, чтобы убедиться, что инициализацию выполняет только один рабочий экземпляр.Один из способов сделать это - попытаться создать очередь (или большой двоичный объект, или сущность в таблице).Если он уже существует, то другой экземпляр обрабатывает инициализацию.Если создание завершится успешно, то это работа этого экземпляра.

Обратите внимание, что всегда лучше использовать аренду, чем блокировку, на случай сбоя экземпляра, выполняющего инициализацию.Рассмотрите возможность использования тайм-аута (напримерсохранение метки времени в табличном хранилище, или в метаданных большого двоичного объекта, или в имени очереди ...).

Другие советы

В итоге мы столкнулись с точно такой же проблемой, вот почему мы ввели O/C картограф (объект для облака).По сути, вы хотите внедрить два типа облачных сервисов:

  1. Служба очередей, которая принимает сообщения всякий раз, когда они доступны.
  2. ScheduledService, который запускает операции по расписанию.

Затем, как предлагали другие, в облаке вы действительно предпочитаете использовать арендаs вместо блокировок, чтобы ваше облачное приложение не зависало навсегда из-за временной проблемы с оборудованием (или инфраструктурой).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top