问题描述
我们拥有什么?
Node.js中构建的API(使用Moleculer.js用于微服务,而PostgreSQL用于存储数据)具有跟踪用户和用户组的功能。我们每个组平均有3000个用户,并且一个用户可以属于多个组。
我们想要实现什么?
我们想创建一个特殊的服务来发送短信。管理员将选择多个组,代码将删除重复的用户并向他们发送短信。
选择之后,我们可以拥有约100万用户。我们如何有效地向他们发送短信?
我们尝试了什么?
-
对用户进行分页,并为每个页面向SMS服务发送请求。
const users = db.getPage(1); // [{ id: 1,phone: '+123456789' },...] smsClient.sendBulk(users);
问题::数据库中的用户列表可能会在此过程中发生更改,并可能通过向我们提供重复项或跳过某些用户来影响分页。
-
将所有结果加载到内存中,并将所有用户发送到SMS服务。
const users = db.getAll(); // [...,{ id: 988123,phone: '+987654321' }] smsClient.sendBulk(users);
问题:我们认为,对资源进行这种查询并将其保留在内存中是一个坏主意,这是一种资源明智的选择。同时,我们不想通过HTTP请求将100万个实体发送到SMS服务。
我们如何选择一百万个用户并向他们发送一条SMS消息,而不必担心重复,跳过数据或对管理员选择进行任何其他更改?我们正在考虑将队列作为必要步骤,但是在找到上述情况的解决方案之后。或者,队列是解决方案的一部分吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)