设计一个api,发送邮件给数据库中的所有用户,该如何设计合理?

发布于 2022-08-30 00:51:09 字数 982 浏览 13 评论 0

需求:

当请求某api时,后台发送邮件至网站所有用户。

说明:

  • 使用sendgrid的api发送邮件,发送之前需要一个存储用户email的数组。比如users=[id1,id2...];
  • 假设设计了一个api比如 post: /sendemails 比如 data : { type: send_to_all }

流程

当用户请求该api,后台接收到之后,使用sendgrid 的api 发送给数组中的每个email.

我现在的想法

接收到此参数,首先向数据库users表请求所有user数据,然后将这些users的email push到一个数组中,然后遍历此数组,通过发送邮件api进行发送。

问题

当用户数据很小的时候,这个方法看似还可以满足需求,但是设想,如果用户量很大很大,有没有更好的方法?
比如批处理这些数据,或者。。?

2014-11-05更新

现在我想的解决方案是,将任务以队列形式交给后台执行,然后通过事件监听来记录每个条目执行成功与否,成功后消除。打算这么做,成功后贴上解决方案

2014-11-06更新

最终解决方案是使用node-resque,让worker去执行,每批发送比如100个,sendgrid有相应的API用来记录发送的详细信息,比如invalid emails或者是blocked emails. 所以我通过sendgrid的api用来跟踪错误信息,非常方便!
sendgrid API

sendgrid这里我又有了一个unicode问题,希望热心的网友看看这里

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

孤星 2022-09-06 00:51:10

把API的请求记录为一次任务, 任务需要签名,可以撤销,可以合并;
后台再有一个进程定时执行这些任务。

俏︾媚 2022-09-06 00:51:10

你肯定得使用ActiveMQ或者Beanstalk这些队列服务,定量的把请求放到队列中去,比如一次发20个,200个看你的服务器情况来定。

蒗幽 2022-09-06 00:51:10

放到队列里面

回眸一遍 2022-09-06 00:51:10

定长集合(capped collection)加tailable,await_data可以在mongoDB方便实现队列.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文