我正在寻找通知系统的设计模式。通知可以是针对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
拥有一个包含通知信息的表格。触发事件后,将为每个用户的第一次尝试的所有通知预先安排并插入到表中。服务将不断查询表以获取当前应处理的任何通知。当应该处理通知时,它将从表中删除,并且下一次通知尝试将被插入到表中。该服务将卸载工作到另一个服务以执行通知。可以通过从表中删除事件来取消事件的待处理通知。
优点:
缺点:
注意:
非常感谢其他设计和评论。
答案 0 :(得分:0)
不要预先安排所有通知。您只需预先安排下一个通知。作为处理通知的一部分,您可以安排下一次尝试。这不仅消除了删除待处理通知的需要,更重要的是使处理延迟成为可能。考虑服务是否停机10分钟然后重新启动,你做什么,你打电话给人A尝试2 和人A尝试3,因为他们都已经过期了?
不断查询表格
这就是数据库的设计目标。您只需确保查询有效。我建议你阅读Using Tables as Queues,特别是有关待处理队列的部分。确保不混合状态和事件,仅为事件保留队列,而不是状态。