Implementando notificações de eventos

Para implementar uma notificação de eventos, antes é necessário criar um serviço de destino para receber as notificações de eventos e só então a notificação.

Observação importanteImportante

A segurança de diálogo do Service Broker deve ser configurada para notificações de eventos que enviam mensagens a um agente de serviços em um servidor remoto. A segurança de diálogo deve ser configurada manualmente, de acordo com o modelo de segurança completo. Para obter mais informações, consulte Segurança de diálogo para notificações de eventos.

Criando o serviço de destino

Não é necessário criar um serviço que inicie o Service Broker, pois o Service Broker inclui o tipo de mensagem específica e o contrato de notificação de eventos a seguir:

https://schemas.microsoft.com/SQL/Notifications/PostEventNotification

O serviço de destino a receber as notificações de eventos deve honrar esse contrato preexistente.

Para criar um serviço de destino:

  1. Crie uma fila para receber mensagens.

    ObservaçãoObservação

    A fila recebe o seguinte tipo de mensagem: https://schemas.microsoft.com/SQL/Notifications/QueryNotification.

  2. Crie um serviço na fila que faça referência ao contrato de notificações de eventos.

  3. Crie uma rota no serviço para definir o endereço para o qual o Service Broker deve enviar mensagens para o serviço. Para notificações de eventos que visem um serviço no mesmo banco de dados, especifique ADDRESS = 'LOCAL'.

    ObservaçãoObservação

    O roteamento do Service Broker determina o serviço que recebe as mensagens de notificação. Se a notificação de eventos visar um serviço em um servidor remoto, tanto o servidor de origem, quanto o servidor de destino devem ter rotas definidas neles mesmos a fim de garantir a comunicação nas duas direções. Para obter mais informações, consulte Roteamento do Service Broker.

O exemplo a seguir cria uma fila, um serviço na fila e uma rota no serviço para manipular mensagens do contrato de notificação de eventos.

CREATE QUEUE NotifyQueue ;
GO
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue
(
[https://schemas.microsoft.com/SQL/Notifications/PostEventNotification]
);
GO
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO

Para obter mais informações sobre como criar serviços de destino do Service Broker, consulte Benefícios de programar com o Service Broker.

Criando a notificação de eventos

As notificações de eventos são criadas por meio da instrução Transact-SQL CREATE EVENT NOTIFICATION e descartadas pela instrução DROP EVENT NOTIFICATION. Para modificar uma notificação de eventos, você deve descartar e recriar a notificação de eventos.

O exemplo a seguir cria a notificação de eventos CreateDatabaseNotification. Essa notificação envia uma mensagem sobre quaisquer eventos CREATE_DATABASE que ocorrerem no servidor para o serviço NotifyService criado previamente.

CREATE EVENT NOTIFICATION CreateDatabaseNotification
ON SERVER
FOR CREATE_DATABASE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;
Observação sobre cuidadosCuidado

Notificações de evento reconhecem eventos CREATE_SCHEMA e definições <schema_element> de instruções CREATE SCHEMA como eventos separados. Por exemplo, suponha que seja criada uma notificação de eventos nos eventos CREATE_SCHEMA e CREATE_TABLE e você execute o lote a seguir.

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

Nesse caso, a notificação de eventos é emitida duas vezes: uma, quando ocorre o evento CREATE_SCHEMA e, outra vez, quando ocorre o evento CREATE_TABLE. Recomendamos evitar criar notificações de eventos ao mesmo tempo em eventos CREATE_SCHEMA e em textos <schema_element> de quaisquer definições CREATE SCHEMA correspondentes ou criar lógica em seu aplicativo para evitar capturar dados de eventos indesejados.

Para criar uma notificação de eventos

Para descartar uma notificação de eventos