Implémenter des notifications d’événements

Pour implémenter une notification d’événement, vous devez d’abord créer un service cible pour recevoir des notifications d’événements, puis créer la notification d’événement.

Important

La sécurité de la boîte de dialogue Service Broker doit être configurée pour les notifications d’événements qui envoient des messages à un service Broker sur un serveur distant. La sécurité de boîte de dialogue doit être configurée manuellement en fonction du modèle de sécurité complet.

Création du service cible

Vous n’avez pas besoin de créer un service d’initialisation Service Broker, car Service Broker inclut le type de message et le contrat spécifiques suivants pour les notifications d’événements :

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

Le service cible qui reçoit des notifications d’événements doit respecter ce contrat préexistant.

Pour créer un service cible :

  1. Créez une file d’attente pour recevoir des messages.

    Remarque

    La file d’attente reçoit le type de message suivant : https://schemas.microsoft.com/SQL/Notifications/QueryNotification.

  2. Créez un service dans la file d’attente qui fait référence au contrat de notifications d’événements.

  3. Créez un itinéraire sur le service pour définir l’adresse à laquelle Service Broker envoie des messages pour le service. Pour les notifications d’événements qui ciblent un service dans la même base de données, spécifiez ADDRESS = 'LOCAL'.

    Remarque

    Le routage Service Broker détermine le service qui reçoit les messages de notification. Si la notification d’événement cible un service sur un serveur distant, le serveur source et le serveur cible doivent avoir des itinéraires définis sur eux pour s’assurer que la communication bidirectionnelle se produit.

L’exemple suivant crée une file d’attente, un service sur la file d’attente et un itinéraire sur le service pour gérer les messages du contrat de notification d’événement.

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  

Création de la notification d’événement

Les notifications d’événements sont créées à l’aide de l’instruction Transact-SQL CREATE EVENT NOTIFICATION et sont supprimées à l’aide de l’instruction DROP EVENT NOTIFICATION. Pour modifier une notification d’événement, vous devez supprimer et recréer la notification d’événement.

L’exemple suivant crée la notification CreateDatabaseNotificationd’événement . Cette notification envoie un message sur tout événement CREATE_DATABASE qui a lieu sur le serveur au service NotifyService qui a été créé précédemment.

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

Avertissement

Les notifications d’événements reconnaissent les événements CREATE_SCHEMA et les <définitions schema_element> des instructions CREATE SCHEMA en tant qu’événements distincts. Par exemple, une notification d’événement est créée sur les événements CREATE_SCHEMA et CREATE_TABLE, et vous exécutez le lot suivant.

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

Dans ce cas, la notification d’événement est déclenchée deux fois : une fois lorsque l’événement CREATE_SCHEMA se produit, et à nouveau lorsque l’événement CREATE_TABLE se produit. Nous vous recommandons d’éviter de créer des notifications d’événements sur les événements CREATE_SCHEMA et les <textes schema_element> de toutes les définitions CREATE SCHEMA correspondantes, ou de générer une logique dans votre application pour éviter de capturer des données d’événements indésirables.

Pour créer une notification d’événement

Pour supprimer une notification d’événement

Voir aussi

Obtenir des informations sur les notifications d’événements
EVENTDATA (Transact-SQL)