定义事件规则
如果您的应用程序支持事件驱动的订阅,则必须定义至少一个事件规则。
事件规则是包含一个或多个创建事件驱动的订阅通知的 Transact-SQL 查询的命名集。或者,事件规则可以对事件历史记录中的数据进行操作。每当事件批次到达之后,便会立即针对该事件批次处理事件规则。
注意: |
---|
触发事件规则的准确计时取决于量程持续时间以及应用程序处理事件的方式。有关详细信息,请参阅指定生成器量程持续时间和指定事件处理顺序。 |
每个订阅类可以包含一个或多个事件规则。但是,您不能指定规则触发顺序。事件规则可以按任意顺序触发。
事件规则处理
Notification Services 使用以下进程来根据事件规则生成通知:
- 事件到达。
- Notification Services 为每个事件类创建一个事件批次,然后将每个事件批次添加到其各自的事件表中。
- Notification Services 针对事件类运行所有历史记录规则,这样可以维护事件历史记录表。
如果历史记录规则失败,则会停止处理并将事件批次标记为失败。事件规则将不会运行,因为它们依赖于成功的事件批次处理。 - Notification Services 然后触发事件规则,这样可联接事件数据和订阅数据以便生成通知。事件规则对仅列出事件类的当前事件的视图以及仅列出已启用的订阅的订阅视图进行操作。事件规则还可以使用事件历史记录数据。
- 事件规则会将结果通知添加到通知表中。此数据用于生成和分发通知。
由于通知在事件到达之后立即生成,因此,事件规则适用于随机出现的事件以及对时间敏感的数据。拍卖更新订阅和动态新闻警报都是应使用事件规则的应用程序示例。
定义事件规则
事件规则是订阅类的一部分。当您定义订阅类时,必须定义至少一个规则(事件规则或预定规则)。若要定义事件规则,请创建一个事件规则项。然后您可以提供名称、要执行的操作以及链接事件类的名称。还可以提供事件规则操作的超时值。
定义事件规则
- 如果您通过 XML 定义应用程序,则请使用 EventRule Element (ADF) 定义事件规则。
- 如果您通过编程方式定义事件规则,则请使用 SubscriptionEventRules 属性创建各 SubscriptionEventRule 对象,然后将这些对象添加到订阅类中。
- 如果您通过编程方式定义具有条件操作的事件规则,则请使用 SubscriptionConditionEventRules 属性创建各 SubscriptionConditionEventRule 对象,然后将这些对象添加到订阅类中。
命名事件规则
每个事件规则都必须在应用程序内具有唯一的名称。该名称用来标识每个用于管理用途的规则。
命名事件规则
- 如果您通过 XML 定义事件规则,则请使用 RuleName Element for EventRule (ADF) 定义事件规则名称。
- 如果您通过编程方式定义事件规则,则请在 SubscriptionEventRule 类 (NMO) 中定义事件规则名称。
- 如果您通过编程方式定义具有条件操作的事件规则,则请使用 SubscriptionConditionEventRule 类 (NMO) 定义事件规则名称。
定义操作或条件操作
操作是指 Notification Services 在每次触发规则时运行的查询。事件规则可以包含简单的操作以及更为复杂的条件操作:
- 操作包含用于根据订阅字段和事件字段之间的匹配来生成通知的 Transact-SQL 查询。当订阅方创建订阅时,他们会定义预定义查询的参数。有关定义简单操作的信息,请参阅定义操作。
- 条件操作也具有 Transact-SQL 查询,但是该查询定义了订阅方可从中定义其订阅的视图。订阅方选择他们感兴趣的字段然后使用预定义的运算符集定义其自己的条件,而不是提供预定义查询的参数。有关定义条件操作的信息,请参阅定义条件操作。
指定超时值
操作超时指定完成操作或条件操作中语句的允许时间。如果超时之后语句仍未完成,则 Notification Services 将回滚事务,将事件规则标记为失败,并将错误写入事件日志中。
指定超时值
- 如果您通过 XML 定义事件规则,则请使用 ActionTimeout Element for EventRule (ADF) 定义超时值。
- 如果您通过编程方式定义事件规则,则请使用 Microsoft.SqlServer.Management.Nmo.SubscriptionEventRule.ActionTimeout 属性 (NMO) 定义超时值。
- 如果您通过编程方式定义具有条件操作的事件规则,则请使用 Microsoft.SqlServer.Management.Nmo.SubscriptionConditionEventRule.ActionTimeout 属性 (NMO) 定义超时值。
将规则链接到事件类
每个事件规则都必须与单个事件类关联。Notification Services 仅在处理指定事件类中的事件批次之后才触发事件规则。
将规则链接到事件类
- 如果您通过 XML 定义事件规则,则请使用 EventClassName Element for EventRule (ADF) 指定事件类名称。
- 如果您通过编程方式定义事件规则,则请使用 Microsoft.SqlServer.Management.Nmo.SubscriptionEventRule.EventClassName 属性 (NMO) 定义事件类名称。
- 如果您通过编程方式定义具有条件操作的事件规则,则请使用 Microsoft.SqlServer.Management.Nmo.SubscriptionConditionEventRule.EventClassName 属性 (NMO) 定义事件类名称。
请参阅
概念
定义预定规则
定义操作
定义条件操作
定义订阅规则
为事件类定义历史记录