Компонент SQL Service Broker как универсальная шина корпоративных сообщений для .net

Мне нужно решение Enterprise Service Bus / Message Queuing для функций издателя / подписчика. Я знаю, что существует МНОГО ... MSMQ, MS Series, RabbitMQ, NServiceBus и т. Д. И т. Д. И т. Д.

Мое единственное требование состоит в том, что в решении для общего хостинга единственная зависимость, которая, как я могу гарантировать, будет существовать, - это SQL 2005 и более поздние версии ... это приводит меня непосредственно к SQL Service Broker.

Если это звучит так, будто я пытаюсь втиснуть функциональность ESB в SSB ... Полагаю, я ...

У меня вопрос: знает ли кто-нибудь об .NET API или платформе, которая находится поверх SQL Service Broker и уже предоставляет большую часть сантехники?

Если бы я использовал чистый ADO.net, я мог бы добавлять элементы в очереди, вызывая хранимую процедуру, но тогда:

  1. Что касается характера разговоров, могу ли я вести один разговор для каждого сообщения?
  2. Если да, потеряю ли я последовательную обработку сообщений?
  3. Как мне получать сообщения (я знаю синтаксис приема в t-SQL), могу ли я повторно вызывать хранимую процедуру в цикле сообщений, чтобы попытаться получить сообщение из очереди?
  4. Или я буду ЖДАТЬ никогда? Сохранять соединение открытым и выполнять хранимую процедуру вечно?
  5. SQL Service Broker не поддерживает монологи, но я читал, что они могут быть реализованы ...

Именно такие вопросы заставляют меня сожалеть о существовании решения .net, которое уже справилось бы со всем этим.


person Novox    schedule 13.05.2014    source источник


Ответы (1)


Была попытка упаковать транспортный канал WCF для SQL Server Service Broker, но, черт возьми, это заброшенное ПО.

Но NServiceBus поддерживает Service Broker в качестве транспортного средства, см. Использование NServiceBus и ServiceBroker.net и есть проекты github, такие как Простой API-оболочка для SQL Service Broker и подключаемый модуль ITransport для NServiceBus. Хотя это не совсем мейнстрим, но определенная поддержка и усилия сообщества все же существуют.

Как ESB, я думаю, у вас будут проблемы из-за отсутствия настоящего pub-sub и трансляции. SQL Server 2012 имеет возможность ОТПРАВИТЬ сообщение нескольким целевым объектам, см. Как Многоадресные сообщения с помощью SQL Server Service Broker, но вам все равно придется реализовать инфраструктуру pub-sub (публикации тем, подписчиков и т. д.) с нуля. MySpace сделал это, и это было серьезным усилием, см. Масштабирование SQL Сервер с использованием надежного обмена сообщениями. Мое наблюдение относится к низкоуровневому прямому использованию SSB, я никогда не использовал NServiceBus, поэтому я не могу сказать, насколько хорошо он абстрагирует / раскрывает одноадресную / широковещательную / многоадресную / pub-sub по SSB.

Что касается ваших конкретных вопросов, я рекомендую прочитать Написание процедур Service Broker и Повторное использование бесед.

person Remus Rusanu    schedule 13.05.2014
comment
Поскольку я разместил этот вопрос, по иронии судьбы, я нашел вашу статью Использование таблиц как очереди. Поскольку я все равно не буду использовать функцию активации Service Broker, я думаю, что смогу вместо этого собрать решение на основе табличной очереди (по всем причинам, которые вы упомянули в разделе Почему не использовать встроенные очереди?). Спасибо! - person Novox; 13.05.2014
comment
Но очередь - это не автобус. Если вам не нужен транспорт и удаленная доставка сообщений, проблема намного проще. Пока вы понимаете, что вы никогда не сможете масштабировать свой единственный экземпляр, на котором размещена таблица очереди, все в порядке. - person Remus Rusanu; 13.05.2014
comment
Один экземпляр SQL, на котором размещена таблица очереди? Разве я не смогу использовать репликацию для нескольких экземпляров SQL? - person Novox; 14.05.2014