Можете ли вы использовать SQL Server Service Broker с приложениями .NET? - PullRequest
19 голосов
/ 22 сентября 2009

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

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

Ответы [ 3 ]

18 голосов
/ 22 сентября 2009

SSB (SQL Service Broker) имеет функцию с именем Activation , которая позволяет прикрепить хранимую процедуру к очереди. SQL Server будет запускать эту процедуру внутри себя, когда в очереди будут сообщения для использования. Процедура присоединения к очереди может быть процедурой CLR, позволяющей запускать модули бизнес-логики управляемого кода (C #, VB.Net etC).

Альтернатива внутренней активированной хранимой процедуре заключается в том, чтобы внешний клиент прослушивал очередь с оператором WAITFOR(RECEIVE ... ). Этот синтаксис является особенным для SSB и выполняет блокировку без объединения до тех пор, пока не будут получены сообщения. Затем приложения используют полученные сообщения как обычный набор результатов T-SQL (например, SELECT). Существует также пример внешнего активатора для Service Broker , который использует механизм уведомления о событиях, чтобы знать, когда запускать приложение для получения сообщений из очереди.

Если вы хотите увидеть пример кода T-SQL, который использует внутреннюю активацию SSB, проверьте Асинхронное выполнение процедуры .

12 голосов
/ 15 ноября 2009

Чтобы ответить на ваши вопросы:

Могу ли я прослушать службу SQL Server Брокерские очереди из приложений .NET работает на другой машине?

Да.

Если это так, я должен это сделать?

Если нет, что бы вы порекомендовали?

Вы можете рассмотреть возможность использования SqlDependency. Он использует Service Broker за кулисами, но не явно.

Вы можете зарегистрировать объект SqlDependency с помощью запроса SELECT или хранимой процедуры. Если другая команда изменяет данные, которые были возвращены из запроса, событие будет запущено. Вы можете зарегистрировать обработчик событий и запускать любой код, который вам нравится в это время. Или вы можете использовать SqlCacheDependency, который просто удалит связанный объект из кэша при возникновении события.

Вы также можете напрямую использовать Service Broker. Однако в этом случае вам нужно будет отправлять и получать собственные сообщения, как в MSMQ.

В средах с балансировкой нагрузки SqlDependency подходит для случаев, когда код должен выполняться на каждом веб-сервере (например, очистка кэша). Сообщения компонента Service Broker лучше подходят для кода, чем для запуска только один раз, например для отправки электронного письма.

Если это поможет, я подробно рассмотрю обе системы с примерами из своей книги ( Ultra-Fast ASP.NET ).

2 голосов
/ 04 апреля 2010

Простая в использовании библиотека очередей для SQL Service Broker на основе rhino-очередей

http://github.com/CoreyKaylor/servicebroker-queues

...