睿象云智能告警平台的分派策略
1194
2023-01-23
本文讲述了事件通知(Event Notification)介绍,事件通知。
了解事件通知
事件通知是特殊类型的数据库对象,用于将有关服务器和数据库事件的信息发送到 Service Broker 服务。
执行事件通知可对各种 Transact-SQL 数据定义语言 (DDL) 语句和 SQL 跟踪事件做出响应,采取的响应方式是将这些事件的相关信息发送到 Service Broker 服务。
事件通知可以用来执行以下操作:
记录和检索发生在数据库上的更改或活动。
执行操作以异步方式而不是同步方式响应事件。
可以将事件通知用作替代 DDL 触发器和 SQL 跟踪的编程方法。
事件通知在事务范围以外异步运行。因此,与 DDL 触发器不同,事件通知可以用于数据库应用程序中以响应事件而无需使用中间事务定义的任何资源。
与 SQL 跟踪不同,事件通知可用于在 SQL Server 实例内部执行操作以响应 SQL 跟踪事件。
创建事件通知时,将会在 SQL Server 实例和指定的目标服务之间打开一个或多个 Service Broker 会话。通常会话保持为打开状态,只要事件通知作为一个对象存在于服务器实例中。在某些出错情况下,会话可以在删除事件通知之前关闭。这些会话从不在事件通知之间共享。每个事件通知都有自己的排他会话。显式结束会话将阻止目标服务接收更多消息,下一次事件通知激发时,会话将不会重新打开。
事件信息作为 xml 类型变量传递给 Service Broker,提供了有关事件的发生时间、受影响的数据库对象、涉及的 Transact-SQL 批处理语句的信息以及其他信息。
与 SQL Server 一起运行的应用程序可以使用事件数据来跟踪进度并做出决策。
若要设计事件通知,必须确定下列内容:
通知的作用域。
引发事件通知的 Transact-SQL 语句或语句组。
定义通知作用域
您可以将事件通知指定为响应针对当前数据库中或 SQL Server 实例中的所有对象执行的语句。针对 QUEUE_ACTIVATION 和 BROKER_QUEUE_DISABLED 事件指定的事件通知的作用域限定为单个队列。并非所有事件都可以在任何作用域级别执行。例如,CREATE_DATABASE 事件仅可在服务器实例级执行。相反,针对 ALTER_TABLE 事件创建的事件通知可以通过编程,针对数据库中或服务器实例中的所有表执行。
指定Transact-SQL语句或语句组
可以创建事件通知以响应下面的内容:
特定 DDL 语句、SQL 跟踪事件或 Service Broker 事件
预定义的 DDL 语句组或 SQL 跟踪事件组
选择特定的 DDL 语句引发事件通知
事件通知可以设计为在运行特定的 Transact-SQL 语句或存储过程之后执行。如上面的示例中所示,事件通知在 ALTER_TABLE 事件之后执行。
有关可指定为引发事件通知的各个 Transact-SQL 语句以及可执行这些通知的作用域的列表,请参阅 DDL 事件。还可以通过查询 sys.event_notification_event_types 目录视图获取这些事件。
选择特定的 SQL 跟踪事件引发事件通知
事件通知可以设计为在 SQL 跟踪事件发生之后激发。
可以通过查询 sys.event_notification_event_types 目录视图获取这些事件的列表。SQL 跟踪事件仅可在服务器实例作用域级执行。
选择特定的 Service Broker 事件引发事件通知
事件通知可以设计为在 QUEUE_ACTIVATION 或 BROKER_QUEUE_DISABLED Service Broker 事件之后激发。当队列有消息要处理时,将发生 QUEUE_ACTIVATION 事件。当队列状态设置为 OFF 时,将发生 BROKER_QUEUE_DISABLED 事件。
选择预定义的 DDL 语句组引发事件通知
事件通知可以在任何属于预定义相似事件组的 Transact-SQL 事件运行之后执行。例如,如果要使事件通知在 CREATE TABLE、ALTER TABLE 或 DROP TABLE 语句执行之后执行,则可以在 CREATE EVENT NOTIFICATION 语句中指定 FOR DDL_TABLE_EVENTS。执行 CREATE EVENT NOTIFICATION 后,事件组将添加到 sys.events 目录视图中。
选择预定义的 SQL 跟踪事件组引发事件通知
事件通知可以在任何属于预定义相似跟踪事件组的 SQL 跟踪事件运行之后执行。例如,如果要使事件通知在任何与锁定相关的跟踪事件(包括 LOCK_DEADLOCK、LOCK_DEADLOCK_CHAIN、LOCK_ESCALATION 和 DEADLOCK_GRAPH 事件)之后执行,则可以在 CREATE EVENT NOTIFICATION 语句中指定 FOR TRC_LOCKS。
若要实现事件通知,必须先创建目标服务以接收事件通知,然后再创建事件通知。
创建目标服务
无需创建 Service Broker 启动服务,因为 Service Broker 包含以下特定的事件通知消息类型和约定:
http://schemas.microsoft.com/SQL/Notifications/PostEventNotification
接收事件通知的目标服务必须使用此预先存在的约定。
创建目标服务:
创建队列以接收消息。
在引用事件通知约定的队列上创建服务。
创建服务路由,以定义 Service Broker 将服务消息发送到的地址。对于指向同一数据库中的服务的事件通知,请指定 ADDRESS = 'LOCAL'。
创建事件通知
事件通知使用 Transact-SQL CREATE EVENT NOTIFICATION 语句创建,使用 DROP EVENT NOTIFICATION STATEMENT 删除。若要修改事件通知,必须先删除事件通知,然后再重新创建。
在zookeeper
中,咱们能够监控特定的znode
节点。当节点发生变化时,便会给监控方发送事件通知。这有点相似于发布-订阅模式,拿Redis
来讲,当咱们发布新消息时,Redis
便会通知订阅者。node
从设计模式上来讲,事件通知属于观察者模式。当被观察者发生某种变化时,通知观察者,观察者对通知做出响应。设计模式
在业务上,能够将事件通知独立成一个微服务:事件中心。本质上,kafka
能作什么,事件中心就能作什么。记得一句话,大概的意思的是:任何问题,都能经过抽象一个中间服务层来解决。微服务
事件中心,主要包括两部分:设计
建立事件
订阅事件
拿客户端冷启动的事件为例。咱们须要在用户打开APP
的时候,作一些特殊的业务逻辑(这种状况应该挺常见的)。事件中心的处理流程包括:代理
在事件中心建立一个客户端冷启动的事件标识
业务在后台订阅这个标识,并配置一个请求地址,用于接受事件回调通知
客户端冷启动时,通知事件中心,事件中心触发回调通知
事件中心充当了代理的角色,由于有了事件中心做为中间层,发布事件的逻辑和消费事件的逻辑能够并行开发。同时,若是有别的业务也须要关注客户端冷启动事件,在事件中心订阅这个事件就能够了。code
上文就是小编为大家整理的事件通知(Event Notification)介绍,事件通知。
国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)睿象云智能运维平台软件分析、比较及推荐。
发表评论
暂时没有评论,来抢沙发吧~