【发布时间】:2014-07-24 16:07:53
【问题描述】:
我们的团队有一个生产级 Meteor 应用。在应用程序中,我们有一个发送电子邮件的特定 Meteor 方法。 今天它通过单击“提交”按钮发送了 127 封电子邮件(在大约 20 分钟的过程中)。
我无法发布确切的代码,但基本流程非常简单:
- 我们捕获提交事件并通过 Meteor.call 将所有内容发送到服务器
- Meteor 方法向服务发送请求以呈现 PDF
- Meteor 方法向 SendGrid 发送带有附件和其他电子邮件数据的请求
- Meteor 方法返回并触发回调
我们确实没有太多基础来确定确切的问题,并且正在研究,但怀疑部分原因是最终用户的连接超时以及 Meteor 重新发送请求而没有得到任何响应。
我们发现有两个线程与该问题相关:https://groups.google.com/forum/#!topic/meteor-talk/vu5kk3t0Lr4 和 https://github.com/meteor/meteor/issues/1285
两者都回答方法应该是幂等的。显然,直接从方法发送电子邮件不是幂等的,因此我们建议 Meteor 方法应该将这些电子邮件添加到队列中,并按计划让不同的服务处理队列。但是,我们不想开始实施可能有助于解决问题的解决方案。
所以,这给我留下了两个问题:
- 究竟什么会导致 Meteor 方法被调用 127 次?我们如何防止这种情况发生?这是 Meteor 中的错误还是我们应用中的错误?
- 如果我们更新方法使其使用 EmailQueue.insert(...)(并让其他东西处理队列),这是否意味着在这种情况下,我们会将 127 条记录放入队列中?这里唯一的解决方案是否具有某种锁定以确保不处理/插入重复记录?
感谢您提供任何见解。
【问题讨论】:
标签: javascript meteor