2012-06-22 2 views
1

У меня есть приложение с несколькими арендаторами, где у них может быть много разных заданий в очереди. Каждое задание состоит из множества отдельных задач, которые хранятся в очереди.Как отключить рабочие роли для каждого работника/арендатора, работающего против очереди в Azure

Для обеих обеим причин пользователей и технических причин, конкретная работа не должна потреблять слишком много работы:

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

Чтобы сделать это сделать несколько сложнее, некоторые работы «связаны» в том, что они будут потреблять те же ресурсы, так что предел 10 работников, должен быть через эти рабочие места

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

Кроме того, это затрудняет/затрудняет выполнение связанных с работой.

Есть ли хороший шаблон дизайна для этого?

+0

Не могли бы вы как-то классифицировать на работу 10 пунктов или меньше, и поместить его в экспресс-лейн? – Paparazzi

ответ

0

Вот шаблон дизайна, который вы, возможно, пожелаете рассмотреть. Он поддерживает простоту архитектуры и низкую стоимость, используя единую очередь и отказоустойчивую, путем очередности всех задач.

Используйте одну очередь для всех сообщений. Обратитесь к этой записи (включая мои ответы) за идеи о регулировании рабочего процесса и очередях, поддерживающих несколько типов сообщений. How to read from multiple queues in real-world?

Вы описали свой процесс как несколько заданий, каждый из которых имеет несколько задач.

  • En-queue, добавив задание (сообщение) в очередь.

  • Обработчик сообщения задания, выполняет первую задачу, добавляет следующую задачу (сообщение) в очередь, а затем удаляет начальное задание (сообщение). Этот шаблон гарантирует, что работа/задача никогда не будет потеряна даже при переработке машины . (Предполагая и требуем, чтобы все ваши задачи были idempotent).

  • Последующие процессоры задач выполняют по существу то же самое, что и до задач больше нет.

  • Если задача занимает больше времени, когда видимость сообщения в очереди
    таймаут, продолжайте увеличивать видимость.
    Ссылка: Is it possible to change an Azure queue message invisibility timeout without posting the data?

+0

Это не касается вопроса о том, что одна работа занята всеми рабочими ролями. –

+0

Возможно, я не понял вас точно. Мой ответ предполагает, что задачи в задании не все помещаются в очередь вместе. Скорее, каждая задание-задание при завершении помещает следующую задание-задание в очередь.Таким образом, любая рабочая задача всегда обрабатывается любой из рабочих ролей. – hocho

 Смежные вопросы

  • Нет связанных вопросов^_^