Большинство, если не все примеры NSB для ASP.NET (или MVC) имеют веб-приложение, отправляющее сообщение с использованием Bus.Send
и, возможно, регистрацию для простого обратного вызова, что по сути является тем, как я использую его в своем приложении.Может ли приложение ASP.NET обрабатывать события NServiceBus?
Что мне интересно, если это возможно и/или имеет смысл для дескрипторов сообщений в том же приложении ASP.NET.
Основная причина, по которой я прошу, это caching. Процесс может выглядеть примерно так:
- Пользователь инициирует запрос из веб-приложения.
- Веб-приложение отправляет сообщение на автономный сервер приложений и регистрирует изменение в локальной базе данных.
- В будущих запросах страницы от одного и того же пользователя веб-приложение знает об изменениях и перечисляет их в состоянии ожидания.
- На заднем конце происходит куча вещей, и в конце концов заявки принимаются или отклоняются. Событие публикуется с ссылкой на исходный запрос.
- На данный момент веб-приложение должно начать отображение самой последней информации.
Теперь, в реальном веб-приложении, почти уверен, что этот ожидающий запрос будет кэшироваться, возможно, в течение длительного периода времени, потому что в противном случае приложение должно запрашивать базу данных для ожидающих изменений каждый раз, когда пользователь запрашивает текущую информацию.
Таким образом, когда запрос, наконец, завершается в фоновом режиме, что может занять минуту или день, веб-приложение, как минимум, должно аннулировать эту запись кэша и выполнять другой поиск в БД.
Теперь я понимаю, что с этим можно управлять с помощью объектов SqlDependency
и т. Д., Но предположим, что они недоступны - возможно, это не серверный сервер SQL Server, или, возможно, запрос текущей информации относится к веб-службе , без разницы. Вопрос в том, как веб-приложение стало известно об изменении статуса?
Если is можно обрабатывать сообщения NServiceBus в приложении ASP.NET, каков контекст обработчика? Другими словами, контейнеру IoC придется вводить кучу зависимостей, но каков их объем? Выполняется ли это все в контексте HTTP-запроса? Или все должно быть static/singleton для обработчика сообщений?
Есть ли лучший/рекомендуемый подход к этому типу проблем?
Я не знаю об обработке событий в IIS, но в любое время, когда вы вводите асинхронные процессы, вам придется иметь дело с возможной согласованностью. Нужно ли мгновенно обновлять веб-приложение или вы можете уйти с обновлением кеша каждую минуту, 15 минут, ежечасно? – Ryan
@ Ryan: Можем ли мы сойти с рук? Вероятно. Мне комфортно с ним от клиента POV? На самом деле, нет. Я в порядке с EC в целом - например, я понимаю, что ничего не будет обработано, если сайт или пул приложений не будет запущен, пока он не запустится снова, и * это * полностью нормально, но информация должна быть поднята в течение нескольких минут после того, как какой-либо пользователь действительно запрашивает его, и данные действительно должны кэшироваться гораздо дольше. Это расхождение обычно разрешается с помощью недействительности кэша вручную или на основе зависимостей. – Aaronaught
Правильно, и это то, что я делаю в своих синхронных приложениях. Для NSB я просто нажимаю DB каждый раз, но у меня просто есть приложение для бэк-офиса с несколькими пользователями. – Ryan