Механизм очереди в .NET и SQL Server - PullRequest
1 голос
/ 28 июня 2011

У меня есть веб-приложение ASP.NET, которое отправляет длинный запрос процесса на сервер SQL.Мы хотим изменить это и вместо этого отправить веб-запрос в очередь, всплывающее сообщение служб Windows из очереди и отправить его один за другим на сервер sql.В настоящее время нам нужно решить, какой механизм используется для очереди.

Рассматривается несколько вариантов реализации очереди, как показано ниже:

1) Таблица базы данных для имитации очереди или

2) Очередь сообщений Windows

Я хочу выяснить плюсы и минусы использования Windows MSMQ и таблицы базы данных.

Обновление :

Другое решение

Сервисный брокер: предложено Ремусом Русану

Требует глубокого изучения.Perfmonece остается неизвестным.

Спасибо

Ответы [ 3 ]

4 голосов
/ 29 июня 2011

Нет необходимости смешивать MSMQ или WCF, просто используйте встроенные в SQL Server возможности организации очередей. См. Асинхронное выполнение процедуры для примера. Таким образом, вам не нужен новый процесс для удаления запросов MSMQ и обработки длинных вызовов БД, вам не нужно иметь дело с отдельным хранилищем сообщений и обработкой БД, у вас есть одно связное восстановление для сообщений и данных, ваши сообщения терпят неудачу вместе с данными в случае ситуации высокой доступности. Не говоря уже о том, что очереди SQL Server масштабируются до значительно более высоких полей, чем MSMQ (как по пропускной способности, так и по емкости). Использование MSMQ потребует от вас решения всех этих проблем: последовательное резервное копирование / восстановление, аварийное переключение через MSMQ вместе с базой данных в случае инцидента HA, обеспечение процесса чтения сообщений MSMQ и выполнения работы базы данных.

3 голосов
/ 28 июня 2011

Таблица базы данных потребует опроса для проверки изменений в базе данных, если вы не можете придумать что-нибудь умное, используя триггеры.MSMQ не будет, поэтому он выигрывает по эффективности.

Очередь может гарантировать доставку, даже если база данных потребления не работает.Таблица базы данных не может.

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

Настройка очереди означает еще одну движущуюся часть вашего приложения;это может добавить сложности.

Я думаю, что может быть третий путь: многопоточная структура данных очереди с производителями / потребителями.Посмотрите на классы .NET, чтобы увидеть, существует ли что-то подобное.Возможно, многопоточные возможности в .NET могут дать вам необходимую асинхронную обработку с меньшей сложностью, чем MSMQ.

1 голос
/ 28 июня 2011

Использовать реализацию MSMQ через WCF. Это просто - невероятно легко настроить и обрабатывает код получателя, который также не работает.

Тогда звонить из Asp.Net тривиально.

См .: (и другие) http://blogs.msdn.com/b/skaufman/archive/2008/02/20/processing-multiple-queues-in-fifo-order-with-wcf.aspx

...