Компонент Service Broker
Применимо к: SQL Server Управляемый экземпляр SQL Azure
SQL Server Компонент Service Broker предоставляют встроенную поддержку для обмена сообщениями и очередей в Компонент SQL Server Database Engine и Управляемом экземпляре SQL Azure. Это облегчает разработчикам создание сложных, надежных распределенных приложений, использующих компоненты Компонент Database Engine для связи между разнородными базами данных.
Когда следует использовать компонент 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 (Transact-SQL)
Сведения об основных понятиях компонента , а также задачах разработки и управления см. в ранее опубликованной документации Компонент Service Broker . Данная документация не воспроизводится в документации SQL Server из-за небольшого числа изменений Компонент Service Broker в недавних версиях SQL Server.
Новые возможности (компонент Service Broker)
Service Broker и Управляемый экземпляр SQL Azure
Обмен сообщениями через Service Broker поддерживается только между управляемыми экземплярами SQL Azure:
CREATE ROUTE
: нельзя использовать CREATE ROUTE с аргументом ADDRESS, для которого значение отличается от LOCAL или указано DNS-имя другого управляемого экземпляра SQL. Должен быть указан порт 4022. См. статью о CREATE ROUTE.ALTER ROUTE
: нельзя использовать ALTER ROUTE с аргументом ADDRESS, для которого значение отличается от LOCAL или указано DNS-имя другого управляемого экземпляра SQL. Должен быть указан порт 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 используется для уведомлений о событиях. Узнайте, как реализовать уведомления о событиях, настроить безопасность диалога или получить дополнительные сведения.