定義事件規則
如果您的應用程式支援事件驅動的訂閱,您必須定義至少一個事件規則。
事件規則是一或多項針對事件驅動的訂閱來建立通知之 Transact-SQL 查詢的具名集合。事件規則可以選擇性地操作事件紀事輯中的資料。在事件批次到達之後,會立即針對每個事件批次來處理事件規則。
附註: |
---|
事件規則確切的引發時間,會隨著配量持續時間和應用程式處理事件的方式而不同。如需詳細資訊,請參閱<指定產生器配量持續時間>和<指定事件處理順序>。 |
每個訂閱類別都可以包含一或多個事件規則。不過,您不能指定規則引發順序。事件規則可以依照任何順序來引發。
事件規則的處理
Notification Services 利用下列程序來從事件規則產生通知:
- 事件到達。
- Notification Services 會針對每個事件類別,各建立一個事件批次,之後,再將每個事件批次加入對應的事件資料表中。
- Notification Services 會針對用來維護事件紀事輯資料表的事件類別來執行任何紀事輯規則。
如果紀事輯規則失敗,處理程序便會停止,且會將事件批次標示為失敗。事件規則也不會執行,因為它們會依賴事件批次處理成功。 - 之後,Notification Services 會引發事件規則,以聯結事件資料和訂閱資料來產生通知。事件規則是針對只列出事件類別之目前事件的檢視以及只列出已啟用的訂閱之訂閱檢視來運作。事件規則也可以使用事件紀事輯資料。
- 事件規則會將產生的通知加入通知資料表中。這項資料用來建立和散發通知。
由於通知會在事件到達之後立即產生,因此,事件規則非常適合隨機產生的事件及具備時間感應功能的資料。拍賣更新訂閱和最新消息警示便是應該使用事件規則的應用程式範例。
定義事件規則
事件規則是訂閱類別的一部份。當您定義訂閱類別時,您必須定義至少一個規則,它可以是事件規則或排程規則。若要定義事件規則,請建立一個事件規則項目。之後,再提供名稱、要執行的動作,以及連結事件類別的名稱。您也可以提供事件規則動作的逾時值。
若要定義事件規則
- 如果您利用 XML 來定義應用程式,請利用 EventRule Element (ADF) 來定義事件規則。
- 如果您以程式設計的方式定義事件規則,請建立個別的 SubscriptionEventRule 物件,再利用 SubscriptionEventRules 屬性將它們加入訂閱類別中。
- 如果您以程式設計的方式定義含條件式動作的事件規則,請建立個別的 SubscriptionConditionEventRule 物件,再利用 SubscriptionConditionEventRules 屬性將它們加入訂閱類別中。
命名事件規則
每個事件規則都必須有在應用程式內的唯一名稱。這個名稱用來識別每個規則,以便進行管理。
若要命名事件規則
- 如果您利用 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) 來定義事件類別名稱。
請參閱
概念
定義排程規則
定義動作
定義條件動作
定義訂閱規則
定義事件類別的紀事輯