【问题标题】:Email Notification Architecture Questions电子邮件通知架构问题
【发布时间】:2011-10-11 16:08:09
【问题描述】:

我们正在寻求开发一种电子邮件通知服务,其中可以根据我们系统内发生的某些操作(用户注册)或例如每周五发送的摘要电子邮件来安排每天、每周或每小时的电子邮件。

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

任何想法都会很棒!

【问题讨论】:

    标签: c# .net asp.net architecture smtp


    【解决方案1】:

    我的 2 美分

    1) 队列。队列非常适合您希望拥有“单进单出”架构类型的任务。队列解耦系统并允许您对系统进行负载平衡。它们通常与 multiple workers 在一端和另一端一起使用。您只需将(可能很多)消息添加到队列中,然后运行 ​​bulk dequeue。 IMO 那就是不合理的内存和资源消耗。

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

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

    【讨论】:

    • 好主意!不是基于用户操作生成的电子邮件……每周摘要电子邮件呢?您为每个人创建一个单独的表以确保不发送重复数据?
    • @Marco 您是否需要同时拥有多种通知类型?是否有许多具有不同通知策略的管理员用户?如果您只有一个管理员并且一次只有一个可能的通知,您可以从 NotificationUsers 表中删除用户(因为您将它们保留在用户表中)。
    • 大约有 20 种不同的类型。没有管理员参与......这一切都是自动化的
    • @Marco,所以你有大约 20 种通知类型,安排在不同的时间间隔,同时工作?一旦一个通知收集了 1 个用户注册,它就不应再出现在任何其他通知中,这是否正确?
    • 正确。每个通知只通知一次
    猜你喜欢
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2014-09-07
    • 2018-01-07
    • 2011-12-16
    • 2015-11-26
    相关资源
    最近更新 更多