Компонент Service BrokerService Broker

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure (только управляемый экземпляр)нетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL Server Компонент Service BrokerService Broker предоставляют встроенную поддержку для обмена сообщениями и очередей в Компонент SQL Server Database EngineSQL Server Database Engine и управляемом экземпляре Базы данных SQL Azure.Компонент Service BrokerService Broker provide native support for messaging and queuing in the Компонент SQL Server Database EngineSQL Server Database Engine and Azure SQL Database Managed Instance. Это облегчает разработчикам создание сложных, надежных распределенных приложений, использующих компоненты Компонент Database EngineDatabase Engine для связи между разнородными базами данных.Developers can easily create sophisticated applications that use the Компонент Database EngineDatabase Engine components to communicate between disparate databases, and build distributed and reliable applications.

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

Используйте компонент Service Broker для реализации собственных функций обработки асинхронных сообщений в базе данных.Use Service Broker components to implement native in-database asynchronous message processing functionalities. Разработчики приложений, использующие компонент Компонент Service BrokerService Broker , могут распределять рабочую нагрузку между несколькими базами данных без программирования сложного взаимодействия и создания внутреннего обмена сообщениями.Application developers who use Компонент Service BrokerService Broker can distribute data workloads across several databases without programming complex communication and messaging internals. Service Broker сокращает разработку и проверочную работу, потому что компонент Компонент Service BrokerService Broker обеспечивает взаимодействие в контексте диалога.Service Broker reduces development and test work because Компонент Service BrokerService Broker handles the communication paths in the context of a conversation. Кроме того, это повышает производительность.It also improves performance. Например, сервер, обслуживающий клиентские запросы базы данных, поддерживающие веб-сайты, может записывать информацию и отправлять ресурсоемкие задачи в очереди серверных баз данных.For example, front-end databases supporting Web sites can record information and send process intensive tasks to queue in back-end databases. Компонент Service BrokerService Broker гарантирует, что управление всеми задачами ведется в контексте транзакций, чтобы обеспечить надежность и техническое единообразие.ensures that all tasks are managed in the context of transactions to assure reliability and technical consistency.

ОбзорOverview

Компонент Service Broker — это инфраструктура доставки сообщений, дающая возможность создания ориентированных на службы приложений в базе данных.Service Broker is a message delivery framework that enables you to create native in-database service-oriented applications. В отличие от функциональных возможностей классической обработки, которые требуют постоянно считывать данные из таблиц и обрабатывать их во время жизненного цикла запроса, в ориентированных на службы приложениях имеются службы базы данных, которые позволяют обмениваться сообщениями.Unlike classic query processing functionalities that constantly read data from the tables and process them during the query lifecycle, in service-oriented application you have database services that are exchanging the messages. Каждая служба имеет очередь, куда помещаются сообщения до их обработки.Every service has a queue where the messages are placed until they are processed.

Service Broker

Сообщения в очередях можно извлечь с помощью команды Transact-SQL RECEIVE или процедуры активации, которая будет вызываться всякий раз, когда сообщение поступает в очередь.The messages in the queues can be fetched using the Transact-SQL RECEIVE command or by the activation procedure that will be called whenever the message arrives in the queue.

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

Службы базы данных создаются с помощью инструкции Transact SQL CREATE SERVICE.Database services are created by using the CREATE SERVICE Transact SQL statement. Службы могут быть связаны с очередью сообщений, созданной с помощью инструкции CREATE QUEUE:Service can be associated with the message queue create by using the CREATE QUEUE statement:

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

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

Сообщения отправляются во время диалога между службами с помощью инструкции Transact-SQL SEND.Messages are sent on the conversation between the services using the SEND Transact-SQL statement. Диалог — канал связи, который устанавливается между службами с помощью инструкции Transact-SQL BEGIN DIALOG.A conversation is a communication channel that is established between the services using the BEGIN DIALOG Transact-SQL statement.

DECLARE @dialog_handle UNIQUEIDENTIFIER;

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

Сообщение будет отправлено в ExpenssesService и помещено в dbo.ExpenseQueue.The message will be sent to the ExpenssesService and placed in dbo.ExpenseQueue. Так как процедуры активации, связанной с этой очередью, нет, сообщение будет оставаться в очереди, пока кто-то не считает его.Because there is no activation procedure associated to this queue, the message will remain in the queue until someone reads it.

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

Сообщения, помещенные в очередь, можно выбрать с помощью стандартного запроса SELECT.The messages that are placed in the queue can be selected by using a standard SELECT query. Инструкция SELECT не изменяет очередь и не удаляет сообщения.The SELECT statement will not modify the queue and remove the messages. Для чтения и извлечения сообщений из очереди можно использовать инструкции Transact-SQL RECEIVE.To read and pull the messages from the queue, you can use the RECEIVE Transact-SQL statement.

RECEIVE conversation_handle, message_type_name, message_body  
FROM ExpenseQueue; 

После обработки всех сообщений из очереди необходимо закрыть диалог с помощью инструкции Transact-SQL END CONVERSATION.Once you process all messages from the queue, you should close the conversation using the END CONVERSATION Transact-SQL statement.

Где найти документацию по компоненту Service Broker?Where is the documentation for Service Broker?

Справочная документация по компоненту Компонент Service BrokerService Broker входит в документацию по SQL Server 2017SQL Server 2017 .The reference documentation for Компонент Service BrokerService Broker is included in the SQL Server 2017SQL Server 2017 documentation. В эту справочную документацию входят следующие разделы:This reference documentation includes the following sections:

Сведения об основных понятиях компонента , а также задачах разработки и управления см. в ранее опубликованной документации Компонент Service BrokerService Broker .See the previously published documentation for Компонент Service BrokerService Broker concepts and for development and management tasks. Эта документация не повторяется в документации по SQL Server 2017SQL Server 2017 из-за малого числа изменений в компоненте Компонент Service BrokerService Broker в SQL Server 2017SQL Server 2017.This documentation is not reproduced in the SQL Server 2017SQL Server 2017 documentation due to the small number of changes in Компонент Service BrokerService Broker in SQL Server 2017SQL Server 2017.

Новые возможности (компонент Service Broker)What's new in Service Broker

В SQL Server 2017SQL Server 2017не были внесены значимые изменения.No significant changes are introduced in SQL Server 2017SQL Server 2017. В SQL Server 2012 (11.x)SQL Server 2012 (11.x)появились следующие изменения.The following changes were introduced in SQL Server 2012 (11.x)SQL Server 2012 (11.x).

Service Broker и Управляемый экземпляр Базы данных SQL AzureService broker and Azure SQL Database Managed Instance

  • Service Broker не поддерживается в нескольких экземплярах.Cross-instance service broker is not supported
  • sys.routes — предварительные требование: выберите адрес из sys.routes.sys.routes - Prerequisite: select address from sys.routes. Адрес должен иметь значение LOCAL для каждого маршрута.Address must be LOCAL on every route. См. статью о sys.routes.See sys.routes.
  • CREATE ROUTE — нельзя использовать CREATE ROUTE с параметром ADDRESS, значение которого отличается от LOCAL.CREATE ROUTE - you cannot use CREATE ROUTE with ADDRESS other than LOCAL. См. статью о CREATE ROUTE.See CREATE ROUTE.
  • ALTER ROUTE — нельзя использовать ALTER ROUTE с параметром ADDRESS, значение которого отличается от LOCAL.ALTER ROUTE cannot use ALTER ROUTE with ADDRESS other than LOCAL. См. статью об ALTER ROUTE.See ALTER ROUTE.

Сообщения могут отправляться в несколько целевых служб (многоадресная рассылка)Messages can be sent to multiple target services (multicast)

Синтаксис инструкции SEND (Transact-SQL) расширен для включения многоадресной рассылки благодаря поддержке нескольких дескрипторов диалога.The syntax of the SEND (Transact-SQL) statement has been extended to enable multicast by supporting multiple conversation handles.

Очереди предоставляют время нахождения сообщения в очередиQueues expose the message enqueued time

Очереди содержат новый столбец message_enqueue_time, в котором показано время нахождения сообщения в очереди.Queues have a new column, message_enqueue_time, that shows how long a message has been in the queue.

Можно отключить обработку сообщений о сбоеPoison message handling can be disabled

Теперь в инструкциях CREATE QUEUE (Transact-SQL) и ALTER QUEUE (Transact-SQL) можно включать или отключать обработку сообщений о сбое, добавляя предложение POISON_MESSAGE_HANDLING (STATUS = ON | OFF).The CREATE QUEUE (Transact-SQL) and ALTER QUEUE (Transact-SQL) statements now have the ability to enable or disable poison message handling by adding the clause, POISON_MESSAGE_HANDLING (STATUS = ON | OFF). Представление каталога sys.service_queues теперь содержит столбец is_poison_message_handling_enabled , показывающий, включено ли сообщение об ошибке.The catalog view sys.service_queues now has the column is_poison_message_handling_enabled to indicate whether poison message is enabled or disabled.

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

Дополнительные сведения см. в статье Компонент Service Broker с группами доступности AlwaysOn (SQL Server).For more information, see Service Broker with Always On Availability Groups (SQL Server).