Какое асинхронное долговременное решение для службы очередей сообщений использовать для веб-службы ASP.NET?
У меня есть веб-сервис ASP.NET, который должен публиковать запросы для асинхронной обработки другим сервисом (отдельный процесс). Таким образом, требование представляет собой длительную очередь. Сервер Windows Server работает под управлением SQL Server.
Я подумал о том, чтобы написать свой собственный сервис очередей, используя таблицу в БД, где публикуются запросы, а другой сервис уведомляется о новых строках, которые он затем обрабатывает. В случае сбоя службы при запуске он обрабатывает все необработанные элементы в таблице очередей.
Затем я решил не использовать БД для обслуживания очереди и управления внутренней очередью в приложении ASP.NET. Для обеспечения долговечности все задания записываются в БД для извлечения в случае сбоя.
Однако этот вариант может не подойти, поскольку идея состоит в том, чтобы иметь общий сервис очередей для обработки заданий из любого серверного приложения.
Поэтому я отправился в путь открытий, начав с того, как уведомить мою службу прослушивания о вставке строки в БД. Я читал об уведомлениях запросов в SQL Server, что привело меня к странице о планировании уведомлений. Там я узнал о Windows Service AppFabric, которая включает в себя возможность сохранения рабочих процессов. Я не уверен, уместно ли это здесь, но это привело меня к чтению о Azure AppFabric и Service Bus, которые идеально подходят для организации очередей сообщений (хотя Azure не подходит, поскольку наш сервер не должен отправлять данные за пределы среды по соображениям соответствия).
Наконец, я узнал, что Microsoft больше не будет поддерживать AppFabric с 2017 года (так что для меня это больше не вариант) и что Redis станет для вас лучшим выбором.
И затем, после некоторого обсуждения с коллегами по этому вопросу, MSMQ (или подобное программное обеспечение для организации очередей) считалось, вероятно, лучшим вариантом, поскольку он дает нам гораздо больший контроль.
Поэтому, основываясь на моих требованиях и вышеупомянутом пути открытий, мы очень ценим любой совет о том, какой будет хорошая стратегия или хорошее решение для рассмотрения.
3 ответа
У RabbitMQ сегодня больше ума, чем у MSMQ - он большой в финансовой индустрии и очень корпоративный.
Вы можете использовать NCache (с открытым исходным кодом или Enterprise) в качестве распределенной очереди сообщений с полной поддержкой восстановления после сбоев, и это также может ускорить работу вашего приложения ASP.NET, поэтому попадание двух зайцев одним выстрелом.
Вы упомянули уведомление о запросе на сервере SQL, которое также поддерживается в NCache под именем Continuous Query.
Это в основном распределенный кеш, который преодолевает узкие места в вашей реляционной базе данных, а также очень прост в использовании. Redis также является хорошим примером для распределенного кэша.
Отказ от ответственности: я работаю на Alachisoft, поэтому спросите, есть ли у вас какие-либо вопросы.
Учитывая тот факт, что вы уже провели некоторые исследования, я лично рекомендую заглянуть в MSMQ. Хотя это сложно и поначалу может показаться сложным, похоже, оно обеспечивает уровень гибкости, необходимый для вашего проекта.
Честно говоря, помимо моего личного мнения, трудно сказать, каков правильный курс действий, просто по нескольким параграфам вопроса.