Как автоматически запустить очередь Azure? - PullRequest
2 голосов
/ 21 октября 2009

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

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

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

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

Любая помощь в этом отношении будет принята с благодарностью!

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

Ответы [ 2 ]

2 голосов
/ 30 октября 2009

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

  1. QueueService, который использует сообщения, когда они доступны.
  2. ScheduledService, запускающее операции по расписанию.

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

2 голосов
/ 21 октября 2009

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

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

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

...