2013-09-02 2 views
4

Я разрабатываю одностраничное приложение на стороне клиента (SPA) с помощью AngularJS и ASP.Net WebAPI.Очереди сообщений в ASP.Net Web API

Одна из особенностей SPA включает в себя загрузку большого CSV-файла, обработку его на сервере и возвращение результата пользователю.

Очевидно, что такого рода вычисления не могут быть выполнены в режиме онлайн, поэтому я внедрил UploadController, отвечающий за получение файла, и PollingController, ответственный за уведомление пользователя, когда вычисление завершено.

Приложение на стороне клиента контролирует PollingController каждые несколько секунд.

У меня нет опыта в очереди сообщений, но моя кишка говорит мне, что они требуются в этой ситуации.

Как бы вы рекомендовали реализовать эту функциональность неблокирующимся, эффективным способом?

diagram

Примеры будут высоко оценены

ответ

6

Я использовал для этого в прошлом служебные шины для служб сообщений.

Вы пишете приложение (работает как служба Windows), которое прослушивает сообщения, транслируемые по шине событий.

Ваш интерфейс может публиковать эти сообщения в автобусе.

Самая популярная инфраструктура для этого в .NET - NServiceBus, однако недавно она стала коммерческой. Вы также можете посмотреть MassTransit, хотя у этого есть очень плохая документация.

рабочего процесса вы могли бы сделать:

  • MVC App принимает загрузить и помещают его в какой-нибудь каталог доступного сервиса окон
  • MVC приложение публикует сообщение «UploadReady».
  • Служба получает сообщение, обрабатывает файл и обновляет некоторое состояние для контроллера опроса.
  • Контрольный контрольный контролер для этого состояния. Обычно запись БД и т. Д.

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

+1

В чем преимущества использования NSeviceBus/MassTransit с использованием MSMQ напрямую? –

+1

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

+0

Только что проверил документацию для Mass Transit, и она значительно улучшилась, поскольку это сообщение было написано, чтобы оно могло быть достойным вашего времени. –

4

Для длительных операций вам необходимо отдельное приложение службы Windows (или работник роли, если это Windows Azure). IIS может убить процессы ASP.NET при утилизации пула, и ваша операция не завершится.

Очередь сообщений в основном предназначена для связи. Вы можете использовать его между веб-сайтом и рабочими частями. Но это не требуется там, если ваши данные не являются сверхкритичными. Вы можете установить связь, используя базу данных, кеш, файловую систему или 100 других способов:

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

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

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