サブスクリプション処理アーキテクチャ
イベントを収集した後、Notification Services はサブスクリプションを処理し、通知を生成できます。イベントに対してサブスクリプションを評価するのは、ジェネレータの仕事です。
通知を生成するには、アプリケーション開発者がそのアプリケーションのルールを 1 つ以上作成します。これらのルールは Transact-SQL クエリとして記述し、イベントとサブスクリプションの関連や、通知を生成するために適合させる必要のあるその他の任意の条件を指定します。
単純なアプリケーションでは、ジェネレータがルールを起動するときに、アプリケーションがイベント ビューに表示されている現在のイベントのバッチに対して、利用可能なすべてのサブスクリプションを評価します。1 つのイベントが 1 つのサブスクリプションと一致すると、通知ジェネレータが通知を作成します。この通知はイベントに関するデータを保持し、さらにサブスクライバ、サブスクライバ デバイス、時にはサブスクライバ ロケール、およびディストリビューションに必要なその他の情報に関するデータも参照します。
通知は、作成された後すぐには送信されません。代わりに、ジェネレータが内部通知テーブルにその通知を書き込みます。通知のバッチの準備が整うと、ディストリビュータがその通知を書式設定し、配信します。
アプリケーションが定期的なサブスクリプションをサポートする場合、ジェネレータが定期的なサブスクリプションを処理する際には、評価の期限になったサブスクリプションのみを確認します。たとえば、ジェネレータが 15 分間隔で実行されていて、午前 8 時になったとすると、ジェネレータは午前 7 時 45 分から午前 8 時までの間にスケジュールが設定されているすべてのサブスクリプションを評価します。
アプリケーションがヒストリカル データを使用する場合、アプリケーションはこのデータをイベントおよびサブスクリプション情報と一緒に、記録と呼ばれる補足テーブルに格納し、後で通知を生成するためにそのデータを使用できます。
ジェネレータは、アプリケーション定義内のクォンタム期間により定義されたスケジュールに従って実行されます。クォンタムは、ジェネレータが起動され、ルールを実行する頻度を決定します。クォンタム間隔を短くすると、ジェネレータが頻繁に実行され、より多くのシステム リソースを消費することになります。クォンタム間隔を長くすると、イベントが到着してから通知の生成までの間の遅延が長くなります。
ルールの種類
ジェネレータの作業は、アプリケーションに対して定義したルールによって決まります。以下の種類のルールを作成できます。
- イベント記録ルールは、アプリケーション開発者が定義した記録テーブルに、イベントの履歴を格納または更新します。ジェネレータを実行するたびに、最初にこの種類のルールが起動されます。
- イベント ルールは、イベント ドリブン サブスクリプションの通知を生成します。関連付けられたイベントのバッチが利用できる場合は、イベント記録ルールの後にこの種類のルールが実行されます。この種類のルールは、記録テーブルの管理もできます。
- 定期的なルールは、定期的なサブスクリプションの通知を生成します。処理期限になったすべての関連サブスクリプションのイベント記録ルールの後に、この種類のルールが実行されます。この種類のルールは、記録テーブルの管理もできます。
ルール操作の種類
イベント ルールおよび定期的なルールでは、ルールが起動されたときに実行する操作を指定します。それぞれの操作は、ジェネレータが実行する作業単位を定義する Transact-SQL クエリです。これらのクエリでは、通知を生成できますが、記録データの管理など、その他の作業も実行できます。
イベント ルールおよび定期的なルールでは、以下のように、パラメータに基づく単純な操作や、条件指定による柔軟な操作を使用できます。
- 単純な操作は、すべての WHERE 句を含めて通知生成クエリを完全に定義する Transact-SQL クエリです。単純な操作では、WHERE 句の式をサブスクリプションおよびイベント データから取得します。たとえば、天気予報アプリケーションで、サブスクライバが天気予報を通知する都市を指定できるようにしたいとします。その場合、単純な操作のクエリでは、イベントとサブスクリプション データを都市名で結合した WHERE 句 (たとえば、
WHERE subscription.city = event.city
) を使用します。
ルールで単純な操作を使用しているときは、サブスクライバがクエリにパラメータ (たとえば、都市名) を提供します。 - 条件操作では、クエリの検索条件をサブスクライバが完全に定義できます。たとえば、サブスクリプション管理インターフェイスでイベントのデータ スキーマを公開すれば、サブスクライバはそのデータを使用して独自の検索条件を作成できます (例 :
WHERE event.State = Washington AND event.LowTemperature < 0
)。サブスクリプション管理インターフェイスでは、列や演算子をリスト ボックスから選択し、テキスト ボックスに値を入力するだけで簡単にこれらの条件を記述できます。
単純操作で生成できる検索条件には制限があるので、それを評価するジェネレータのパフォーマンスは通常、条件操作よりも高くなります。条件操作では高度な検索を設定できますが、イベント ルールまたは定期的なルールの検索条件を評価する際のオーバーヘッドが大きくなります。
参照
概念
ジェネレータ クォンタム期間の指定
サブスクリプション ルールの定義
イベント コレクション アーキテクチャ
サブスクリプション管理アーキテクチャ
通知の書式設定と配信アーキテクチャ