示例:比较事件数据以避免重复通知
以下示例显示如何使用历史记录表,根据以前接收到的事件数据来避免多余的通知,从而只向订阅方发送新的唯一数据。在本例中,一个新闻更新应用程序将向您发送有关某个特定新闻网站上的新标题的通知。
应用场景
您的事件驱动订阅被定义为只要该新闻网站上发布了新标题就通知您。Web 站点不提供让事件提供程序知道新闻标题何时更改的方法,因此事件提供程序每 15 分钟收集一次新闻标题元素的内容。下表显示了早晨的数据。
时间 | 新闻标题 |
---|---|
09:00 GMT |
首都政局陷入僵持 |
09:15 GMT |
首都政局陷入僵持 |
09:30 GMT |
野火正在漫延 |
您收到一条基于 09:00 GMT 数据的通知,其中包括当前的新闻标题:“奥林匹亚政局陷入僵持。”处理了事件批次后,将产生通知,并根据为此应用程序定义的事件历史记录规则,在事件历史记录表中为当前标题插入对应的一行。
订阅规则
为订阅规则定义的通知生成操作将使用事件历史记录表来避免重复通知,即排除事件历史记录表中已经存在标题值的任何事件:
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)
结果
在本例中,通知过程以如下方式进行:
- 第一个标题(“奥林匹亚政局陷入僵持”)不在历史记录表中,因此将作为通知发送给您。然后,使用该标题更新历史记录表。
- 第二个标题“奥林匹亚政局陷入僵持”与历史记录表中现有的记录(来自第一个标题)相同。该标题不会发送给您,历史记录表也不进行更新。
- 第三个标题“野火在漫延”不在历史记录表中,因而将作为通知发送给您。然后,使用该标题更新历史记录表。
请参阅
概念
为事件类定义历史记录
定义事件历史记录表
定义订阅规则
示例:使用预定的订阅的事件历史记录
示例:使用较大的事件数据值来避免重复通知