Поделиться через


Service Broker

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

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

Когда следует использовать компонент 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) ;  

Сообщение будет отправлено в ExpensesService и помещено в 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

Сервисный брокер и управляемый экземпляр SQL Azure

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

  • 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 используется для уведомлений о событиях. Узнайте, как реализовать уведомления о событиях, настроить безопасность диалога или получить дополнительные сведения.