Подтвердить что ты не робот

Можете ли вы/вы должны использовать SQL Server Service Broker с приложениями .NET?

У меня есть много операций в базе данных, которые должны запускать код приложения. В настоящее время я использую опрос базы данных, но я слышал, что SQL Server Service Broker может предоставить мне MSMQ-подобные функции.

  • Могу ли я слушать очереди брандеров SQL Server Service из приложений .NET, работающих на другой машине?
  • Если да, то должен ли я это сделать?
  • Если нет, что бы вы порекомендовали?
4b9b3361

Ответ 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, Выполнение асинхронной процедуры.