Какое асинхронное долговременное решение для службы очередей сообщений использовать для веб-службы 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. Хотя это сложно и поначалу может показаться сложным, похоже, оно обеспечивает уровень гибкости, необходимый для вашего проекта.

Честно говоря, помимо моего личного мнения, трудно сказать, каков правильный курс действий, просто по нескольким параграфам вопроса.

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