訂閱處理架構
收集事件之後,Notification Services 就可以處理訂閱,產生通知。對照事件來評估訂閱是產生器的工作。
為了產生通知,應用程式開發人員會為應用程式建立一或多個規則。這些規則是撰寫在 Transact-SQL 查詢中,此查詢會指定事件與訂閱的相關性,以及達到哪些條件時要產生通知。
在簡單的應用程式中,產生器引發規則之後,應用程式會對照事件檢視中可見的目前事件批次,來評估所有可用的訂閱。若有單一事件符合單一訂閱,通知產生器就會建立通知。這個通知中包含事件的相關資料,並且也參照訂閱者的相關資料、訂閱者裝置 (有時候是訂閱者的地區設定),及散發所需的其他資訊。
通知不會在建立後就立刻傳送。而是由產生器將通知寫入內部的通知資料表。等到通知批次準備就緒,即由散發者格式化及散發通知。
如果應用程式支援已排程的訂閱,則當產生器處理已排程的訂閱時,僅會查看應評估的訂閱。例如,若產生器每隔 15 分鐘執行,則上午 8:00 時,產生器就會評估排程為上午 7:45 至上午 8:00 的所有訂閱。
如果應用程式使用歷程記錄資料,則應用程式可以將此資料和事件及訂閱資訊一起儲存在名為紀事輯的增補資料表中,然後可以使用此資料產生通知。
產生器會根據應用程式定義中的*「配量」*持續時間來執行。配量決定產生器甦醒、引發規則的頻率。配量期短,會造成產生器更頻繁地執行,而耗用較多的系統資源。配量間隔長,則造成事件到達及通知產生之間較長的延遲時間。
規則類型
產生器的工作是由為應用程式定義的規則所決定的。您可以建立下列類型的規則:
- *「事件紀事輯規則」*儲存或更新由應用程式開發人員所定義之紀事輯資料表中的事件歷程記錄。產生器每次執行時,都會先引發此類型的規則。
- *「事件規則」*產生事件驅動訂閱的通知。如果有相關的事件批次可用,此類型的規則會在事件紀事輯規則之後執行。此類型的規則也能夠管理紀事輯資料表。
- *「排程規則」*會產生已排程訂閱的通知。在應處理的任何相關訂閱的事件紀事輯之後,此類型的規則會執行。此類型的規則也能夠管理紀事輯資料表。
規則動作類型
事件規則和排程規則會指定規則引發時要執行的動作。每一個動作都是定義產生器執行一組工作的 Transact-SQL 查詢。這些查詢可以產生通知,但也可以執行如管理紀事輯資料的其他工作。
事件規則和排程規則可以使用簡單、以參數為基礎的動作或更靈活的條件動作:
- *「簡單動作」*是完整定義通知產生查詢的 Transact-SQL 查詢,包括所有 WHERE 子句。簡單動作會從訂閱和事件資料取得 WHERE 子句運算式。例如,天氣應用程式可以允許訂閱者指定要取得天氣預報資料的城市。接著,簡單動作查詢會使用 WHERE 子句 (例如:
WHERE subscription.city = event.city
),在城市名稱聯結事件和訂閱資料。
當規則使用簡單動作時,訂閱者必須提供查詢的參數,如城市名稱。 - *「條件動作」*允許訂閱者完整定義其查詢搜尋條件。例如,您可以在您的訂閱管理介面中公開事件資料結構描述,並允許訂閱者在此資料上建立他們自己的搜尋條件,如
WHERE event.State = Washington AND event.LowTemperature < 0
。您的訂閱管理介面可以讓撰寫這些搜尋條件,和從清單方塊選取資料行和運算子並在文字方塊中輸入值一樣簡單。
簡單動作會產生一組有限的搜尋條件供產生器評估,因此一般而言會比條件動作執行的效能還好。條件動作功能較強大,但是評估事件規則或排程規則較多的搜尋條件時,也會具有較大的負擔。
請參閱
概念
指定產生器配量持續時間
定義訂閱規則
事件集合架構
訂閱管理架構
通知格式化及傳遞架構