实现事件通知

适用范围:SQL Server

若要实现事件通知,必须先创建目标服务以接收事件通知,然后再创建事件通知。

重要

对于将消息发送到远程服务器上的 Service Broker 的事件通知,应配置 Service Broker 对话安全性。 必须根据完全安全模式手动配置对话安全设置。

创建目标服务

无需创建 Service Broker 启动服务,因为 Service Broker 包含以下特定的事件通知消息类型和约定:

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

接收事件通知的目标服务必须遵守这一既有约定。

创建目标服务

  1. 创建队列以接收消息。

    注意

    队列接收下列消息类型: http://schemas.microsoft.com/SQL/Notifications/QueryNotification

  2. 在该队列中创建一个引用事件通知契约的服务。

  3. 创建服务路由,以定义 Service Broker 将服务消息发送到的地址。 对于指向同一数据库中的服务的事件通知,请指定 ADDRESS = 'LOCAL'

    注意

    Service Broker 路由确定接收通知消息的服务。 如果事件通知指向远程服务器中的服务,则源服务器和目标服务器必须都定义了路由,确保实现双向通信。

下面的示例将创建队列、队列服务以及服务路由,以便依据事件通知约定处理消息。

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

创建事件通知

事件通知是使用 Transact-SQL CREATE EVENT NOTIFICATION 语句创建的,并使用 DROP EVENT NOTIFICATION STATEMENT 删除。 若要修改事件通知,必须先删除事件通知,然后再重新创建。

下面的示例将创建事件通知 CreateDatabaseNotification。 该通知将服务器中发生的 CREATE_DATABASE 事件的相关消息发送到先前创建的 NotifyService 服务。

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

注意

事件通知将 CREATE_SCHEMA 事件和 CREATE SCHEMA 语句的 <schema_element> 定义视为单独的事件。 例如,针对 CREATE_SCHEMA 和 CREATE_TABLE 事件创建事件通知,然后便可运行以下批处理。

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

在这种情况下,事件通知会被引发两次:一次在CREATE_SCHEMA事件发生时,一次在CREATE_TABLE事件发生时。 建议避免在CREATE_SCHEMA事件和<任何相应>定义的schema_elementCREATE SCHEMA文本上创建事件通知,或将逻辑构建到应用程序中,以避免捕获不需要的事件数据。

创建事件通知

删除事件通知

另请参阅

获取有关事件通知的信息
EVENTDATA (Transact-SQL)