用于安排大量通知的设计模式

时间:2014-10-15 19:34:39

标签: sql notifications

我正在寻找通知系统的设计模式。通知可以是针对1-many用户在特定时间发生的电话,SMS或电子邮件。通知过程将由内部事件触发。典型情况如下:

After the event is triggered...

Call - person A at 03:00:00 (attempt 1)
Call - person B at 03:00:05 (attempt 1)
Call - person C at 03:01:00 (attempt 1)
Call - person A at 03:05:00 (attempt 2)
Call - person B at 03:05:05 (attempt 2)
Call - person C at 03:06:00 (attempt 2)
...
Person A answered on attempt 3. Cancel all pending notifications for the event.

设计#1.1

拥有一个包含通知信息的表格。触发事件后,将为每个用户的第一次尝试的所有通知预先安排并插入到表中。服务将不断查询表以获取当前应处理的任何通知。当应该处理通知时,它将从表中删除,并且下一次通知尝试将被插入到表中。该服务将卸载工作到另一个服务以执行通知。可以通过从表中删除事件来取消事件的待处理通知。

优点:

  • 简单设计
  • 服务轻量级

缺点:

  • 不断查询表格。看起来不是最有效的方式。

注意:

  • 添加建议Remus Rusanu

非常感谢其他设计和评论。

1 个答案:

答案 0 :(得分:0)

不要预先安排所有通知。您只需预先安排下一个通知。作为处理通知的一部分,您可以安排下一次尝试。这不仅消除了删除待处理通知的需要,更重要的是使处理延迟成为可能。考虑服务是否停机10分钟然后重新启动,你做什么,你打电话给人A尝试2 人A尝试3,因为他们都已经过期了?

  

不断查询表格

这就是数据库的设计目标。您只需确保查询有效。我建议你阅读Using Tables as Queues,特别是有关待处理队列的部分。确保不混合状态和事件,仅为事件保留队列,而不是状态。