Implementar notificaciones de eventos
Para implementar una notificación de eventos, debe crear primero un servicio de destino para que reciba las notificaciones de eventos y, a continuación, crear la notificación de eventos.
Importante |
---|
La seguridad de diálogo de Service Broker se debe configurar para las notificaciones de eventos que envíen mensajes a un Service Broker en un servidor remoto. La seguridad del diálogo debe configurarse manualmente según el modelo de seguridad completa. |
Crear el servicio de destino
No es necesario que cree un servicio de inicio de Service Broker debido a que Service Broker incluye el siguiente tipo de mensaje y contrato para notificaciones de eventos:
https://schemas.microsoft.com/SQL/Notifications/PostEventNotification
El servicio de destino que recibe notificaciones de eventos debe respetar este contrato preexistente.
Para crear un servicio de destino:
Cree una cola para recibir mensajes.
[!NOTA]
La cola recibe el siguiente tipo de mensaje: https://schemas.microsoft.com/SQL/Notifications/QueryNotification.
Cree un servicio en la cola que hace referencia al contrato de notificaciones de eventos.
Cree una ruta en el servicio para definir la dirección a la que Service Broker envía los mensajes de ese servicio. Para las notificaciones de eventos que tengan como destino un servicio en la misma base de datos, especifique ADDRESS = 'LOCAL'.
[!NOTA]
El enrutamiento de Service Broker determina el servicio que recibe los mensajes de notificación. Si la notificación de eventos tiene como destino un servicio en un servidor remoto, tanto el servidor de origen como el servidor de destino deben tener rutas definidas en este servidor para garantizar que se produce comunicación en los dos sentidos.
En el ejemplo siguiente se crea una cola, un servicio en la cola y una ruta en el servicio para procesar los mensajes del contrato de notificaciones 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
Crear la notificación de eventos
Las notificaciones de eventos se crean mediante la instrucción CREATE EVENT NOTIFICATION de Transact-SQL y se quitan con DROP EVENT NOTIFICATION STATEMENT. Para modificar una notificación de eventos, debe quitarla y volver a crearla.
En el ejemplo siguiente se crea la notificación de eventos CreateDatabaseNotification. Esta notificación envía un mensaje acerca de cualquier evento CREATE_DATABASE que se produzca en el servidor en el servicio NotifyService que se creó anteriormente.
CREATE EVENT NOTIFICATION CreateDatabaseNotification
ON SERVER
FOR CREATE_DATABASE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;
Advertencia |
---|
Las notificaciones de eventos reconocen los eventos CREATE_SCHEMA y las definiciones <schema_element> de las instrucciones CREATE SCHEMA como eventos independientes. Por ejemplo, una notificación de eventos se crea en los dos eventos CREATE_SCHEMA y CREATE_TABLE, y se ejecuta el siguiente lote. CREATE SCHEMA s CREATE TABLE t1 (col1 int) En este caso, el evento se notifica dos veces: una vez cuando se produce el evento CREATE_SCHEMA y otra vez cuando ocurre el evento CREATE_TABLE. Es recomendable que no cree notificaciones de eventos en los eventos CREATE_SCHEMA ni en los textos <schema_element> de las definiciones CREATE SCHEMA correspondientes, y que no genere lógica en la aplicación para evitar capturar datos de eventos no deseados. |
Para crear una notificación de eventos
Para quitar una notificación de eventos