电子邮件通知架构问题

本文关键字:问题 通知 电子邮件 | 更新日期: 2023-09-27 18:03:07

我们希望开发一种电子邮件通知服务,其中电子邮件可以根据我们系统(用户注册)内发生的某些动作或每周五发送的摘要电子邮件安排每日,每周或每小时。

确保不发送重复邮件的最佳方法是什么?我们考虑过让应用程序在系统操作发生时向队列写入记录,但这似乎又增加了一个故障点。或者让所有通知都是数据驱动的,例如,选择所有创建日期大于现在的用户。但是在这种情况下,我们需要一种方法来确保如果服务再次运行,不会发送重复的电子邮件。

有什么主意就太好了!

电子邮件通知架构问题

我的两分钱

1) 队列。队列对于想要拥有"单入口单出口"类型架构的任务非常有用。队列将系统解耦,并允许您对系统进行负载平衡。它们通常与一端和另一端的多个工作一起使用。您只需将(可能很多)消息添加到队列中,然后运行bulk dequeue。在我看来,这是不合理的内存和资源消耗。

2) 由Users驱动的数据。更容易实现,但是对于每个通知,您将检查每个用户,并且会给db带来沉重的负载。

3) 数据通过UserNotifications驱动。或者,您可以创建一个单独的表UserNotifications,每个用户在注册后将被添加到其中。在给定的时间范围内选择所需的用户要容易得多,并且不需要将它们存储在内存中。通知发送后,从UserNotifications表中删除用户。