我希望建立一个功能,当某些内容发布在我们的网站上时,人们可以通过电子邮件收到通知。 用户将提供他们的电子邮件地址,选择他们感兴趣的几个主题领域以及他们想要更新的频率(每天或每周)。
构建此类系统的最佳实践是什么?
我想我会从某种具有以下字段的订阅表(postgres)开始:
- 电子邮件
- subject_areas(ID列表?
- 频率(每天/每周)
- last_emailed(时间戳)
我可以构建一个每天晚上针对此表运行的工作,该表将点击每一行并聚合与他们感兴趣的subject_areas匹配的所有内容,生成电子邮件并将其放入 Mandrill 或 Amazon 等第三方电子邮件服务中。
这似乎是一个好方法还是有更好的方法来解决这个问题?
这些表可能是:
- 用户(电子邮件、姓名)
- 科目
- 订阅(user_id、subject_id、last_emailed、频率)
您想要的另一部分是后台作业队列系统(delayed_job、sidekiq 或 resque),您将在其中放置作业。 工作进程将处理作业并将其发送到另一个进程中。
Cron 和 BG 作业齐头并进
Cron(或调度程序)。
- 查找已订阅的所有用户。
- 对于每个用户 - 确定是否有新内容要发送给他们
- 为要接收新内容的用户加载作业
后台辅助角色
- 对于每个user_subscriber_job - 构建基于电子邮件内容以及用户信息和订阅的内容
- 发送电子邮件