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 — это инфраструктура доставки сообщений, дающая возможность создания ориентированных на службы приложений в базе данных. В отличие от функциональных возможностей классической обработки, которые требуют постоянно считывать данные из таблиц и обрабатывать их во время жизненного цикла запроса, в ориентированных на службы приложениях имеются службы базы данных, которые позволяют обмениваться сообщениями. Каждая служба имеет очередь, куда помещаются сообщения до их обработки.
Сообщения в очередях можно извлечь с помощью команды 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. В эту справочную документацию входят следующие разделы:
Data Definition Language (DDL) Statements (Transact-SQL) (Инструкции языка описания данных (DDL) (Transact-SQL)) — инструкции CREATE, ALTER и DROP
Связанные динамические административные представления Service Broker (Transact-SQL)
См. ранее опубликованную документацию по концепциям 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 используется для уведомлений о событиях. Узнайте, как реализовать уведомления о событиях, настроить безопасность диалога или получить дополнительные сведения.