Вопрос

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

Я хотел бы знать, существуют ли какие-либо хорошие решения для этого, которые можно использовать в среде ASP.NET MVC.

Был ли у кого-нибудь опыт (хороший или плохой)?

Спасибо!

ОБНОВЛЯТЬ:

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

1) Стандартная ситуация:

  • Запрос из браузера
  • Начинается обработка сервера
  • Начало долгой работы
  • Долгая работа закончена
  • Обработка сервера завершена
  • Ответ вернулся в браузер

2) Что я изучаю:

  • Запрос из браузера
  • Начинается обработка сервера
  • Длинное задание помещено в очередь
  • Обработка сервера завершена
  • Ответ вернулся в браузер

И в другом процессе (возможно, после отправки ответа):

  • Длинное задание взято из очереди
  • Начало долгой работы
  • Долгая работа закончена

В первом случае пользователь долго ждал ответа сервера, во втором — быстро.

Конечно, есть определенные виды работ, которые подходят для этого, а некоторые нет.

ОБНОВЛЕНИЕ2:

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

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

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

Решение

Разместите данные о вакансии в Очередь MSMQ и попросить службу Windows обработать элементы в очереди.Или позвольте веб-запросу запустить процесс, который обрабатывает элементы в очереди.

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

Rhino Service Bus — еще одно решение, которое может вам подойти:
http://ayende.com/Blog/archive/2008/12/17/rhino-service-bus.aspx

Вы можете проверить использование ESB.Я поигрался с MassTransit: http://code.google.com/p/masstransit/ - документация (или, по крайней мере, была) немного скудна, но ее легко реализовать.

Кроме того, я разрабатываю приложения для работы на Amazon EC2 и мне очень нравится их сервис AmazonSQS.

Спасибо,

Хэл

Поскольку в другом комментарии вы упомянули, что ищете эквивалент сервиса sqs от Amazon...возможно, вы захотите изучить Windows Azure.У них есть эквивалентный API очереди:
http://msdn.microsoft.com/en-us/library/dd179363.aspx

Я реализовал этот шаблон, заставив веб-сервер асинхронно вызывать службу WCF.Мастера VS сгенерируют для вас асинхронные прокси-серверы, когда вы используете службу WCF.Если вам необходима гарантированная доставка запроса к службе, вы можете использовать MSMQ в качестве транспортного уровня для службы WCF.

Я думаю, что комментарий Криситана может быть вашим ответом, но, учитывая, что я мало что знаю об IIS и очередях с ним, мое решение будет таким:

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

РЕДАКТИРОВАТЬ

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

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