Partilhar via


Agente de Serviço

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 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. Cada serviço tem uma fila em que as mensagens são colocadas até serem processadas.

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.

Criação de serviços

Os serviços de banco de dados são criados com a instrução Transact-SQL CREATE SERVICE. O serviço pode ser associado com a criação da fila de mensagens por meio da instrução CREATE QUEUE:

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

Envio de 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.

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. Como não há nenhum procedimento de ativação associado a essa fila, a mensagem permanecerá nela até que alguém a leia.

Processamento de mensagens

As mensagens colocadas na fila podem ser selecionadas por meio de uma consulta SELECT padrão. A instrução SELECT não modificará a fila e removerá as mensagens. Para ler e efetuar pull das mensagens da fila, use a instrução Transact-SQL RECEIVE.

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.

Onde está a documentação do Service Broker?

A documentação de referência do Agente de Serviço está incluída na documentação do SQL Server . Esta documentação de referência inclui as seguintes seções:

Consulte a documentação publicada anteriormente para saber mais sobre conceitos do Agente de Serviço e sobre tarefas de desenvolvimento e gerenciamento. Essa documentação não é reproduzida na documentação do SQL Server devido ao pequeno número de alterações no Agente de Serviço em versões recentes do SQL Server.

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 Gerenciada de SQL do Azure estão atualmente em visualização pública:

  • CREATE ROUTE: a porta especificada deve ser 4022. Confira CREATE ROUTE.
  • ALTER ROUTE: a porta especificada deve ser 4022. Confira ALTER ROUTE.

Há suporte para a segurança do transporte, mas não para a segurança da caixa de diálogo:

  • CREATE REMOTE SERVICE BINDING não é suportado.

O Service Broker está habilitado por padrão e não pode ser desabilitado. As seguintes opções de ALTER DATABASE não têm suporte:

  • ENABLE_BROKER
  • DISABLE_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 (Transact-SQL) foi estendida para habilitar o multicast, dando suporte a vários identificadores de conversa.

Filas expõem o tempo de enfileiramento da mensagem

Filas têm uma nova coluna, message_enqueue_time, que mostra quanto tempo uma mensagem permaneceu na fila.

A manipulação de mensagens suspeitas pode estar desabilitada

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). 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.

Suporte AlwaysOn no Service Broker

Para obter mais informações, consulte Service Broker com Grupos de Disponibilidade AlwaysOn (SQL Server).

Próximas etapas

O uso mais comum de Service Broker é para notificações de eventos. Saiba como implementar notificações de eventos, configurar a segurança de diálogo ou obter mais informações.