Решения для организации очередей для ASP.NET MVC
-
20-09-2019 - |
Вопрос
Я изучаю концепцию очередей для веб-приложений (т.помещение некоторых типов заданий в очередь для выполнения отдельным работником, а не в цикле веб-запроса).
Я хотел бы знать, существуют ли какие-либо хорошие решения для этого, которые можно использовать в среде 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 и очередях с ним, мое решение будет таким:
Сделайте асинхронный запрос и загрузите сведения о задании в базу данных.Затем поручите задание просмотреть базу данных и обработать детали задания.Я делаю это для одного из своих сайтов.Возможно, это не лучшее решение, но оно выполняет свою работу.
РЕДАКТИРОВАТЬ
Мой ответ все еще может работать, но вам понадобится какой-то механизм опроса на клиенте, чтобы постоянно проверять базу данных, чтобы увидеть, выполнена ли работа этого пользователя, а затем получать необходимые вам данные.