Service BrokerService Broker

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure (somente a Instância Gerenciada) nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

SQL ServerSQL Server Service BrokerService Broker oferece suporte nativo a mensagens e enfileiramento no Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine e na Instância Gerenciada do Banco de Dados SQL do Azure.Service BrokerService Broker provide native support for messaging and queuing in the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine and Azure SQL Database Managed Instance. Dessa maneira, fica mais fácil para os desenvolvedores a criação de aplicativos sofisticados que usam os componentes do Mecanismo de Banco de DadosDatabase Engine para comunicação entre bancos de dados díspares e a criação de aplicativos distribuídos confiáveis.Developers can easily create sophisticated applications that use the Mecanismo de Banco de DadosDatabase Engine components to communicate between disparate databases, and build distributed and reliable applications.

Quando usar o Service BrokerWhen to use Service Broker

Use componentes do Service Broker para implementar funcionalidades de processamento de mensagens assíncronas no banco de dados nativo.Use Service Broker components to implement native in-database asynchronous message processing functionalities. Os desenvolvedores de aplicativos que usam o Service BrokerService Broker podem distribuir cargas de trabalho de dados por vários bancos de dados sem programação de comunicação complexa e mensagens internas.Application developers who use Service BrokerService Broker can distribute data workloads across several databases without programming complex communication and messaging internals. O Service Broker reduz o trabalho de desenvolvimento e teste porque o Service BrokerService Broker controla os caminhos de comunicação no contexto de uma conversa.Service Broker reduces development and test work because Service BrokerService Broker handles the communication paths in the context of a conversation. Isso também melhora o desempenho.It also improves performance. Por exemplo, bancos de dados front-end que oferecem suporte a sites podem gravar informações e enviar tarefas intensivas de processamento para enfileiramento em bancos de dados back-end.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 garante que todas as tarefas sejam gerenciadas no contexto de transações para assegurar a confiabilidade e a consistência técnica.ensures that all tasks are managed in the context of transactions to assure reliability and technical consistency.

Visão geralOverview

O Service Broker é uma estrutura de entrega de mensagens que permite criar aplicativos nativos no banco de dados orientado a serviços.Service Broker is a message delivery framework that enables you to create native in-database service-oriented applications. Ao contrário das funcionalidades clássicas de processamento de consultas, que constantemente leem dados das tabelas e os processam durante o ciclo de vida da consulta, no aplicativo orientado a serviços, você tem serviços de banco de dados que trocam mensagens.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. Cada serviço tem uma fila em que as mensagens são colocadas até serem processadas.Every service has a queue where the messages are placed until they are processed.

Service Broker

As mensagens nas filas podem ser buscadas por meio do comando RECEIVE do Transact-SQL ou pelo procedimento de ativação que será chamado sempre que a mensagem chegar à fila.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.

Criação de serviçosCreating services

Os serviços de banco de dados são criados com a instrução Transact-SQL CREATE SERVICE.Database services are created by using the CREATE SERVICE Transact SQL statement. O serviço pode ser associado com a criação da fila de mensagens por meio da instrução 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; 

Envio de mensagensSending messages

As mensagens são enviadas na conversa entre os serviços por meio da instrução Transact-SQL SEND.Messages are sent on the conversation between the services using the SEND Transact-SQL statement. Uma conversa é um canal de comunicação estabelecido entre os serviços por meio da instrução 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) ;  

A mensagem será enviada para o ExpenssesService e colocada em dbo.ExpenseQueue.The message will be sent to the ExpenssesService and placed in dbo.ExpenseQueue. Como não há nenhum procedimento de ativação associado a essa fila, a mensagem permanecerá nela até que alguém a leia.Because there is no activation procedure associated to this queue, the message will remain in the queue until someone reads it.

Processamento de mensagensProcessing messages

As mensagens colocadas na fila podem ser selecionadas por meio de uma consulta SELECT padrão.The messages that are placed in the queue can be selected by using a standard SELECT query. A instrução SELECT não modificará a fila e removerá as mensagens.The SELECT statement will not modify the queue and remove the messages. Para ler e efetuar pull das mensagens da fila, use a instrução 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; 

Após processar todas as mensagens da fila, feche a conversa com a instrução Transact-SQL END CONVERSATION.Once you process all messages from the queue, you should close the conversation using the END CONVERSATION Transact-SQL statement.

Onde está a documentação do Service Broker?Where is the documentation for Service Broker?

A documentação de referência do Service BrokerService Broker está incluída na documentação do SQL Server 2019 (15.x)SQL Server 2019 (15.x) .The reference documentation for Service BrokerService Broker is included in the SQL Server 2019 (15.x)SQL Server 2019 (15.x) documentation. Esta documentação de referência inclui as seguintes seções:This reference documentation includes the following sections:

Consulte a documentação publicada anteriormente para saber mais sobre conceitos do Service BrokerService Broker e sobre tarefas de desenvolvimento e gerenciamento.See the previously published documentation for Service BrokerService Broker concepts and for development and management tasks. Esta documentação não é reproduzida na documentação do SQL Server 2019 (15.x)SQL Server 2019 (15.x) devido ao pequeno número de alterações no Service BrokerService Broker no SQL Server 2019 (15.x)SQL Server 2019 (15.x).This documentation is not reproduced in the SQL Server 2019 (15.x)SQL Server 2019 (15.x) documentation due to the small number of changes in Service BrokerService Broker in SQL Server 2019 (15.x)SQL Server 2019 (15.x).

Novidades no Service BrokerWhat's new in Service Broker

Nenhuma alteração significativa foi introduzida no SQL Server 2019 (15.x)SQL Server 2019 (15.x).No significant changes are introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x). As alterações a seguir foram introduzidas no 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 e Instância Gerenciada do Banco de Dados SQL do AzureService broker and Azure SQL Database Managed Instance

  • Não há suporte para Service Broker entre instânciasCross-instance service broker is not supported
  • sys.routes – Pré-requisito: selecione o endereço de sys.routes.sys.routes - Prerequisite: select address from sys.routes. O endereço deve ser o LOCAL em cada rota.Address must be LOCAL on every route. Confira sys.routes.See sys.routes.
  • CREATE ROUTE – não é possível usar CREATE ROUTE com ADDRESS diferente de LOCAL.CREATE ROUTE - you cannot use CREATE ROUTE with ADDRESS other than LOCAL. Confira CREATE ROUTE.See CREATE ROUTE.
  • ALTER ROUTE – não é possível usar ALTER ROUTE com ADDRESS diferente de LOCAL.ALTER ROUTE cannot use ALTER ROUTE with ADDRESS other than LOCAL. Confira ALTER ROUTE.See ALTER ROUTE.

As mensagens podem ser enviadas a vários serviços de destino (multicast)Messages can be sent to multiple target services (multicast)

A sintaxe da instrução SEND (Transact-SQL) foi estendida para habilitar o multicast, dando suporte a vários identificadores de conversa.The syntax of the SEND (Transact-SQL) statement has been extended to enable multicast by supporting multiple conversation handles.

Filas expõem o tempo de enfileiramento da mensagemQueues expose the message enqueued time

Filas têm uma nova coluna, message_enqueue_time, que mostra quanto tempo uma mensagem permaneceu na fila.Queues have a new column, message_enqueue_time, that shows how long a message has been in the queue.

A manipulação de mensagens suspeitas pode estar desabilitadaPoison message handling can be disabled

As instruções CREATE QUEUE (Transact-SQL) e ALTER QUEUE (Transact-SQL) agora tem a capacidade de habilitar ou desabilitar a manipulação de mensagens suspeitas adicionando a cláusula 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). A exibição de catálogo sys.service_queues agora tem a coluna is_poison_message_handling_enabled para indicar se a mensagem suspeita está habilitada ou desabilitada.The catalog view sys.service_queues now has the column is_poison_message_handling_enabled to indicate whether poison message is enabled or disabled.

Suporte AlwaysOn no Service BrokerAlways On support in Service Broker

Para obter mais informações, consulte Service Broker com Grupos de Disponibilidade AlwaysOn (SQL Server).For more information, see Service Broker with Always On Availability Groups (SQL Server).