【问题标题】:How to handle multiple emails being sent with nodemailer without blocking main thread如何在不阻塞主线程的情况下处理使用 nodemailer 发送的多封电子邮件
【发布时间】:2021-12-16 23:08:03
【问题描述】:

我有一个具有多个路由的节点应用程序,并且所有案例都使用异步函数来处理它们,但我期待一个逻辑/想法,当要发送多封电子邮件以及用户名等相应的电子邮件内容时如何进行处理,使用nodemailer(正在迭代)的图像等。

基本上我有一个数组/对象,它包含发送每个电子邮件地址的所有内容,但如果我允许执行,那么该循环将阻塞主线程,因此下一个请求/任务将无法实现。

期待得到一些想法。

谢谢。

【问题讨论】:

  • 您需要排队,在每项工作之后,确定队列的优先级并确定您是否可以发送下一封电子邮件。
  • 所以想法是,服务器收到的每个请求都被组织到不同的队列中,因此一个只能用于电子邮件,一个用于登录请求等......当您完成登录请求时,您会清除该请求的登录队列并检查您的队列处理程序以了解下一步要做什么。
  • 我同意这一点。将工作组织到队列中可以更轻松地在未来扩展您的应用程序。例如,您最终可以将电子邮件发送完全卸载到单独的进程/服务器。
  • 使用 Node.JS 的核心可以获得大约 400 次请求/秒,因此它非常适合随时将任务卸载到其他服务器并确保其安全。如果没有,可以依靠负载平衡器并编写一个队列,在每 5-10 个请求中发送一封电子邮件请求。所以它不是太贪婪。
  • 如何检查线程是否实际上是空的,以便我将开始触发 100 封邮件中的一些邮件,然后停止然后继续留出邮件?是否像全局队列一样存储它们,然后检索并处理任务?

标签: javascript node.js async-await backend nodemailer


【解决方案1】:

您可以在发送响应后调用您的函数。

myController = (req, res, next) => {
   /* some code */

   res.send("OK");
   callMailServicesHere(myArray);

}

【讨论】:

  • 但是 fxn callMailServicesHere 在执行时仍然有 myArray ,它将开始迭代并开始发送电子邮件,这将阻止堆栈以允许服务器上的其他任务。
  • 你是对的。我误解了你的问题。然后,我认为blanknamefornow的答案会是。或者您可以将您的邮件服务分离为微服务。这样,您就不必担心事件循环阻塞,并且您的邮件将独立于服务器的其余部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
相关资源
最近更新 更多