Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Instância Gerenciada de SQL do Azure
O SQL Server Agente de Serviço fornece suporte nativo a mensagens e enfileiramento no Mecanismo de Banco de Dados do SQL Server e na Instância Gerenciada de SQL do Azure. Dessa maneira, fica mais fácil para os desenvolvedores a criação de aplicativos sofisticados que usam os componentes do Mecanismo de Banco de Dados para comunicação entre bancos de dados díspares e a criação de aplicativos distribuídos confiáveis.
Quando usar o Service Broker
Use componentes do Service Broker para implementar funcionalidades de processamento de mensagens assíncronas no banco de dados nativo. Os desenvolvedores de aplicativos que usam o Agente de Serviço podem distribuir cargas de trabalho de dados por vários bancos de dados sem programação de comunicação complexa e mensagens internas. O Service Broker reduz o trabalho de desenvolvimento e teste porque o Agente de Serviço controla os caminhos de comunicação no contexto de uma conversa. Isso também melhora o desempenho. 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. Agente de Serviço garante que todas as tarefas sejam gerenciadas no contexto de transações para assegurar a confiabilidade e a consistência técnica.
Visão geral
O Service Broker é uma estrutura de entrega de mensagens que permite criar aplicativos nativos no banco de dados orientado a serviços. Ao contrário das funcionalidades de processamento de consulta clássicas que leem constantemente os dados das tabelas e os processam durante o ciclo de vida da consulta, os aplicativos orientados ao serviço têm serviços de banco de dados que estão trocando as mensagens. Cada serviço tem uma fila em que as mensagens são colocadas até serem processadas.
As mensagens nas filas podem ser buscadas usando o comando Transact-SQL RECEIVE ou pelo procedimento de ativação que é chamado sempre que a mensagem chega na fila.
Criar serviços
Observação
Um serviço de destino deve expor um ou mais contratos. Se você criar um serviço sem contratos, ele não poderá receber mensagens. As mensagens enviadas parecerão bem-sucedidas, mas as mensagens permanecerão no sys.transmission_queue do iniciador
/*
In this example, the initiator must then use ON CONTRACT [DEFAULT] and a MESSAGE TYPE [DEFAULT]. [DEFAULT] is a delimited identifier for the built‑in contract and isn't a T‑SQL keyword, so it must be bracketed or quoted.
*/
CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
ON QUEUE dbo.ExpenseQueue ([DEFAULT]);
Enviar mensagens
As mensagens são enviadas na conversa entre os serviços por meio da instrução Transact-SQL SEND. Uma conversa é um canal de comunicação estabelecido entre os serviços por meio da instrução Transact-SQL BEGIN DIALOG.
-- Begin a dialog
DECLARE @dialog_handle AS UNIQUEIDENTIFIER;
BEGIN DIALOG @dialog_handle
FROM SERVICE ExpensesClient
TO SERVICE N'ExpensesService'
ON CONTRACT [DEFAULT];
-- Send a message
SEND ON CONVERSATION (@dialog_handle)
MESSAGE TYPE [DEFAULT] (N'<Expense ExpenseId="1" Amount="123.45" Currency="USD"/>');
A mensagem é enviada para ExpensesService e colocada em dbo.ExpenseQueue. Como não há nenhum procedimento de ativação associado a essa fila, a mensagem permanece na fila até que alguém a leia.
Processar mensagens
As mensagens colocadas na fila podem ser selecionadas por meio de uma consulta SELECT padrão. A SELECT instrução não modifica a fila e remove as mensagens. Para ler e efetuar pull das mensagens da fila, use a instrução Transact-SQL RECEIVE.
RECEIVE TOP (1)
conversation_handle,
message_type_name,
TRY_CAST (message_body AS NVARCHAR (MAX)) AS message_body_text
FROM dbo.ExpenseQueue;
GO
Após processar todas as mensagens da fila, feche a conversa com a instrução Transact-SQL END CONVERSATION.
-- Drain any remaining target conversations for the from the queue
DECLARE @conversation_hdl AS UNIQUEIDENTIFIER;
WHILE EXISTS (SELECT 1 FROM dbo.ExpenseQueue)
BEGIN
RECEIVE TOP (1) @conversation_hdl = conversation_handle FROM dbo.ExpenseQueue;
END CONVERSATION @conversation_hdl;
END
GO
Documentação do Service Broker
Para obter mais informações sobre o Service Broker, consulte:
-
Instruções de linguagem de definição de dados para
CREATEinstruções eALTERinstruçõesDROP - instruçõesTransact-SQL
- Exibições do catálogo do Service Broker (Transact-SQL)
- Exibições de gerenciamento dinâmico relacionadas ao Service Broker (Transact-SQL)
- utilitário ssbdiagnose (Service Broker)
Você também pode consultar a documentação publicada anteriormente para conceitos do Service Broker e para tarefas de desenvolvimento e gerenciamento.
Novidades no Service Broker
Service Broker e Instância Gerenciada de SQL do Azure
A troca de mensagens entre instâncias do Service Broker entre instâncias da Instância Gerenciada de SQL do Azure e a troca de mensagens entre o SQL Server e a Instância de Gerenciamento de SQL do Azure está atualmente em versão prévia pública:
-
CREATE ROUTE: a porta especificada deve ser 4022. Consulte CREATE ROUTE (Transact-SQL). -
ALTER ROUTE: a porta especificada deve ser 4022. Consulte ALTER ROUTE (Transact-SQL).
Há suporte para a segurança do transporte, enquanto a segurança de diálogo não é suportada.
-
CREATE REMOTE SERVICE BINDINGnão é compatível.
O Service Broker está habilitado por padrão e não pode ser desabilitado. Não há suporte para as seguintes ALTER DATABASE opções:
ENABLE_BROKERDISABLE_BROKER
Nenhuma alteração significativa foi introduzida no SQL Server 2019 (15.x). As alterações a seguir foram introduzidas no SQL Server 2012 (11.x).
As mensagens podem ser enviadas a vários serviços de destino (multicast)
A sintaxe da instrução SEND foi estendida para habilitar o multicast, dando suporte a vários identificadores de conversa.
Filas expõem o tempo de enfileiramento da mensagem
As filas têm uma nova coluna, message_enqueue_timeque mostra por quanto tempo uma mensagem está na fila.
A manipulação de mensagens suspeitas pode estar desabilitada
As instruções CREATE QUEUE e ALTER QUEUE agora têm a capacidade de habilitar ou desabilitar o tratamento de mensagens suspeitas adicionando a cláusula POISON_MESSAGE_HANDLING (STATUS = ON | OFF). A exibição sys.service_queues do catálogo agora tem a coluna is_poison_message_handling_enabled para indicar se a mensagem de veneno está habilitada ou desabilitada.
Suporte ao grupo de disponibilidade no Service Broker
Para obter mais informações, consulte Service Broker com Grupos de Disponibilidade AlwaysOn (SQL Server).