Можете ли вы/вы должны использовать SQL Server Service Broker с приложениями .NET?
У меня есть много операций в базе данных, которые должны запускать код приложения. В настоящее время я использую опрос базы данных, но я слышал, что SQL Server Service Broker может предоставить мне MSMQ-подобные функции.
- Могу ли я слушать очереди брандеров SQL Server Service из приложений .NET, работающих на другой машине?
- Если да, то должен ли я это сделать?
- Если нет, что бы вы порекомендовали?
Ответы
Ответ 1
Чтобы ответить на ваши вопросы:
Могу ли я слушать службу SQL Server Очереди брокеров из приложений .NET работает на другой машине?
Да.
Если да, то должен ли я это сделать?
Если нет, что бы вы порекомендовали?
Вы можете использовать SqlDependency
. Он использует Service Broker за кулисами, но не явно.
Вы можете зарегистрировать объект SqlDependency
с запросом SELECT
или хранимой процедурой. Если другая команда изменяет данные, которые были возвращены из запроса, произойдет событие. Вы можете зарегистрировать обработчик событий и запустить любой код, который вам нравится в это время. Или вы можете использовать SqlCacheDependency
, который просто удалит связанный объект из кэша при возникновении события.
Вы также можете использовать Service Broker напрямую. Однако в этом случае вам нужно будет отправлять и получать свои собственные сообщения, как в MSMQ.
В средах с балансировкой нагрузки SqlDependency
хорош для случаев, когда код должен запускаться на каждом веб-сервере (например, для очистки кеша). Сообщения Service Broker лучше для кода, чем должны выполняться только один раз - например, отправка электронной почты.
В случае, если это помогает, я подробно описываю обе системы примерами в моей книге (Ultra-Fast ASP.NET).
Ответ 2
У SSB (SQL Service Broker) есть функция с именем Activation, которая включала хранимая процедура для присоединения к очереди. SQL Server будет запускать эту процедуру внутренне, когда есть сообщения, которые нужно использовать в очереди. Процедура присоединения к очереди может быть CLR-процедурой, позволяющей запускать управляемые логические модули управляемого кода (С#, VB.Net etC).
Альтернативой внутренней активированной хранимой процедуре является наличие внешнего клиента для прослушивания в очереди с оператором WAITFOR(RECEIVE ... )
. Этот синтаксис является особым для SSB и делает блок без объединения, пока не будут получены сообщения. Затем приложения используют принятые сообщения как обычный набор результатов T-SQL (например, SELECT). Существует также образец External Activator для Service Broker, который использует механизм уведомления о событиях, чтобы знать, когда запускать приложение для потребления сообщений из очереди.
Если вы хотите увидеть образец кода T-SQL, который использует внутреннюю активацию SSB, Выполнение асинхронной процедуры.
Ответ 3
Простая в использовании библиотека очередей для SQL Service Broker на основе очередей rhino
http://github.com/CoreyKaylor/servicebroker-queues