Service Broker

Область применения: SQL Server Управляемый экземпляр SQL Azure

SQL Server Service Broker обеспечивает встроенную поддержку обмена сообщениями и очередей в ядро СУБД SQL Server и Управляемый экземпляр SQL Azure. Разработчики могут легко создавать сложные приложения, использующие компоненты ядро СУБД для обмена данными между разнородными базами данных, а также создавать распределенные и надежные приложения.

Когда следует использовать компонент Service Broker

Используйте компонент Service Broker для реализации собственных функций обработки асинхронных сообщений в базе данных. Разработчики приложений, использующие Service Broker, могут распределять рабочие нагрузки данных между несколькими базами данных без программирования сложных внутренних данных и обмена сообщениями. Service Broker сокращает работу по разработке и тестированию, так как Service Broker обрабатывает пути связи в контексте беседы. Кроме того, это повышает производительность. Например, сервер, обслуживающий клиентские запросы базы данных, поддерживающие веб-сайты, может записывать информацию и отправлять ресурсоемкие задачи в очереди серверных баз данных. Service Broker гарантирует, что все задачи управляются в контексте транзакций для обеспечения надежности и технической согласованности.

Обзор

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

Service Broker

Сообщения в очередях можно извлечь с помощью команды Transact-SQL RECEIVE или процедуры активации, которая будет вызываться всякий раз, когда сообщение поступает в очередь.

Создание служб

Службы базы данных создаются с помощью инструкции Transact SQL CREATE SERVICE. Службы могут быть связаны с очередью сообщений, созданной с помощью инструкции CREATE QUEUE:

CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
    ON QUEUE dbo.ExpenseQueue; 

Отправка сообщений

Сообщения отправляются во время диалога между службами с помощью инструкции Transact-SQL SEND. Диалог — канал связи, который устанавливается между службами с помощью инструкции Transact-SQL BEGIN DIALOG.

DECLARE @dialog_handle UNIQUEIDENTIFIER;

BEGIN DIALOG @dialog_handle  
FROM SERVICE ExpensesClient  
TO SERVICE 'ExpensesService';  
  
SEND ON CONVERSATION @dialog_handle (@Message) ;  

Сообщение будет отправлено в ExpenssesService и помещено в dbo.ExpenseQueue. Так как процедуры активации, связанной с этой очередью, нет, сообщение будет оставаться в очереди, пока кто-то не считает его.

Обработка сообщений

Сообщения, помещенные в очередь, можно выбрать с помощью стандартного запроса SELECT. Инструкция SELECT не изменяет очередь и не удаляет сообщения. Для чтения и извлечения сообщений из очереди можно использовать инструкции Transact-SQL RECEIVE.

RECEIVE conversation_handle, message_type_name, message_body  
FROM ExpenseQueue; 

После обработки всех сообщений из очереди необходимо закрыть диалог с помощью инструкции Transact-SQL END CONVERSATION.

Где найти документацию по компоненту Service Broker?

Справочная документация по Service Broker включена в документацию ПО SQL Server. В эту справочную документацию входят следующие разделы:

См. ранее опубликованную документацию по концепциям Service Broker и задачам разработки и управления. Эта документация не воспроизводится в документации ПО SQL Server из-за небольшого количества изменений в Service Broker в последних версиях SQL Server.

Новые возможности (компонент Service Broker)

Service Broker и Управляемый экземпляр SQL Azure

Обмен сообщениями между экземплярами Управляемый экземпляр SQL Azure и обменом сообщениями между SQL Server и экземпляром управления SQL Azure в настоящее время находится в общедоступной предварительной версии:

  • CREATE ROUTE: указанный порт должен иметь значение 4022. См. статью о CREATE ROUTE.
  • ALTER ROUTE: указанный порт должен иметь значение 4022. См. статью об ALTER ROUTE.

Защита транспорта поддерживается, а защита обмена данными — нет:

  • Функция CREATE REMOTE SERVICE BINDING не поддерживается.

Компонент Service Broker включен по умолчанию и его нельзя отключить. Следующие параметры ALTER DATABASE не поддерживаются:

  • ENABLE_BROKER
  • DISABLE_BROKER

В SQL Server 2019 (15.x) не были введены существенные изменения. В SQL Server 2012 (11.x) появились следующие изменения.

Сообщения могут отправляться в несколько целевых служб (многоадресная рассылка)

Синтаксис инструкции SEND (Transact-SQL) расширен для включения многоадресной рассылки благодаря поддержке нескольких дескрипторов диалога.

Очереди предоставляют время нахождения сообщения в очереди

Очереди содержат новый столбец message_enqueue_time, в котором показано время нахождения сообщения в очереди.

Можно отключить обработку сообщений о сбое

Теперь в инструкциях CREATE QUEUE (Transact-SQL) и ALTER QUEUE (Transact-SQL) можно включать или отключать обработку сообщений о сбое, добавляя предложение POISON_MESSAGE_HANDLING (STATUS = ON | OFF). Представление каталога sys.service_queues теперь содержит столбец is_poison_message_handling_enabled , показывающий, включено ли сообщение об ошибке.

Поддержка AlwaysOn в компоненте Service Broker

Дополнительные сведения см. в статье Компонент Service Broker с группами доступности AlwaysOn (SQL Server).

Следующие шаги

Чаще всего Service Broker используется для уведомлений о событиях. Узнайте, как реализовать уведомления о событиях, настроить безопасность диалога или получить дополнительные сведения.