Обзор возможностей SQL Server Service Broker
Service Broker является компонентом SQL Server и предназначен для приложений обмена сообщениями и приложений с очередями сообщений.
Представим, как работает обычная почта в реальной жизни. В процессе участвуют несколько объектов-это люди, участвующие в переписке; почтовые отделения, сортирующие и перенаправляющие почту; средства транспорта. И самый главный объект – письма, на лицевой стороне которых расположена некая служебная информация: адрес отправителя и получателя, приоритет и т.п.
В нотации SQL Server Service Broker всем этим объектам можно найти аналоги:
Письмо = Message (Сообщение)
Адрес = ServiceBroker сервис
Почтовый ящик = Очередь
Адресат = Приложение, которое получает сообщение и каким-либо образом взаимодействует с ним
Приложение, которое использует Service Broker, не обязано знать, как обрабатывается сообщение, каким способом оно доставляется адресату. Все это происходит прозрачно для пользователей.
Service Broker позволяет решать типичные проблемы систем передачи сообщений:
Производительность
Высокая производительность Service Broker достигается за счет того, что очереди являются объектами самой базы данных, поэтому нет необходимости в распределенных транзакциях. Broker может управлять своими задачами в контексте локальных транзакций SQL Server.
Управление очередями и транзакциями
Service Broker использует подход, когда на одну очередь может существовать несколько читателей очереди, работающих параллельно, что значительно ускоряет работу сервиса.
А если один из этих читателей обработает сообщение, которое логически должно обрабатываться в определенном порядке? Например, данные по банковской проводке должны быть обработаны позже заголовка проводки. Для предотвращения такой ситуации в Service Broker существует механизм блокирования группы (conversationgrouplocking ).
Сonversation group locking-группирует связанные сообщения для того, чтобы не возникали проблемы при параллельной обработки взаимосвязанных сообщений. Когда приложение посылает или отправляет сообщение, Service Broker ставит блокировку на группу, к которой принадлежит сообщение, поэтому только одна сессия может получать сообщения.
Последовательность сообщений
Очереди координируют и упорядочивают связанные сообщения. Т.е. сообщения принимаются в том же порядке, в котором были отправлены. Программа получит каждое сообщение диалога только один раз.
Последовательность поддерживается через последовательность номеров, которая увеличиваются для каждого отправленного сообщения. Если вы посылаете несколько сообщений, каждое сообщение получает последовательность номера, начиная с 1.
Приемник будет пытаться получить сообщение с последовательностью номер 1, а затем сообщение с последовательностью номер 2 и так далее. Если сообщение потеряется в процессе отправки, принимающая сторона будет ожидать, когда сообщение будет успешно послано заново.
Администрирование
Операции сопровождения и администрирования баз данных распространяются и на систему компонента Service Broker, т.к. она является составной частью ядра базы данных. Обычно нет необходимость что-либо разрабатывать дополнительно для компонента Service Broker.
Итак, Service Broker решает типичные проблемы систем по обмену сообщениями. Кроме того имеет следующий функционал:
Гарантированная доставка
Тот, кто посылает сообщение, полностью уверен в том, что сообщение дойдет в полной сохранности, даже если принимающая сторона в настоящее время не может принять сообщение.
Длительность
Диалоги могут существовать от нескольких секунд до нескольких лет.
Отсутствие дублей
Гарантия того, что сообщение будет доставлено только один раз.
Постоянство
Так как объекты Service Broker располагаются в базе данных, то при рестарте всего сервера базы данных, все открытые диалоги и необработанные сообщения не пропадают и становятся доступными, когда база данных станет доступной.
Области применения ServiceBroker .
Информацию по некоторым областям применения SQL Server Service Broker можно подчерпнуть на сайте https://msdn.microsoft.com/ru-ru/library/ms166071.aspx
Использование компонента Service Broker может быть полезно для любого приложения, требующего асинхронной или распределенной между несколькими компьютерами обработки данных.
Типовые варианты использования компонента Service Broker включают:
· Асинхронные триггеры
· Надежную обработку запросов
· Надежный сбор данных
· Распределенную серверную обработку для клиентских приложений
· Консолидацию данных для клиентских приложений
· Широкомасштабную пакетную обработку