Решения для очередей для ASP.NET MVC

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

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

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

Спасибо!

ОБНОВИТЬ:

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

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

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

2) Что я смотрю в:

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

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

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

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

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

UPDATE2:

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

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

6 ответов

Решение

Разместите данные задания в очереди 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.

Спасибо,

Хэл

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

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

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

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

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

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

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