イベント データの比較による通知の重複防止の例
次の例では、イベント記録テーブルと既に受信しているイベント データを使用して、冗長な通知を回避する方法を示しています。これにより、新しい一意のデータだけがサブスクライバに送信されます。この例では、ニュース更新アプリケーションによって、特定のニュース Web サイト上の新しい見出しに関する通知が送信されます。
シナリオ
ユーザーのイベント ドリブン サブスクリプションは、新しい見出しがニュース Web サイトに掲示されると常に通知するように定義されています。この Web サイトにはイベント プロバイダに見出しの変更を通知する機能がないため、このイベント プロバイダは見出し要素の内容を 15 分ごとに収集します。朝のデータを次の表に示します。
時刻 | ニュースの見出し |
---|---|
09:00 GMT |
Political Gridlock in Capital City |
09:15 GMT |
Political Gridlock in Capital City |
09:30 GMT |
Wildfire in the Cascades |
09:00 GMT のデータに基づく通知を受信します。このデータには、現在の見出し「Political Gridlock in Olympia」が含まれています。イベント バッチが処理され、通知が生成されると、このアプリケーションに対して定義されているイベント記録ルールによって、現在の見出しの行がイベント記録テーブルに挿入されます。
サブスクリプション ルール
サブスクリプション ルールに対して定義された通知生成アクションは、イベント記録テーブルを使用して、イベント記録テーブル内に既に存在する見出し値を除外することで通知の重複を防ぎます。
SELECT dbo.NewsNotificationNotify(S.SubscriberId,
S.SubscriberDeviceName, S.SubscriberLocale,
E.Headline, E.BrowseBackURL)
FROM dbo.NewsSubscriptions S, dbo.NewsEvents E
WHERE E.Headline
NOT IN (SELECT Headline from dbo.NewsEventChron )
INSERT dbo.NewsEventChron(Headline)
SELECT NewsEvents.Headline
FROM dbo.NewsEvents
WHERE NewsEvents.Headline
NOT IN (SELECT Headline FROM dbo.NewsEventChron)
結果
この例を基にすると、通知処理は次のように進行します。
- 最初の見出し "Political Gridlock in Olympia" は記録テーブルにないため、通知として送信されます。次に、この見出しで記録テーブルが更新されます。
- 2 番目の見出し "Political Gridlock in Olympia" は、記録テーブルの既存レコード (最初の見出しのレコード) と同一です。送信は行われず、記録テーブルは更新されません。
- 3 番目の見出し "Wildfire in the Cascades" は記録テーブルにないため、通知として送信されます。次に、この見出しで記録テーブルが更新されます。
参照
概念
イベント クラスの記録の定義
イベント記録テーブルの定義
サブスクリプション ルールの定義
定期的なサブスクリプションでのイベント記録の使用例
イベント データの最高値を使用して通知の重複を防止する例