【发布时间】:2024-01-16 21:08:01
【问题描述】:
我正在使用 Google Pub/Sub 作为消息队列在 Node JS 中构建电子邮件处理管道。消息队列有一个限制,它需要在 10 分钟内确认已发送的消息。但是,它发送到 Node JS 服务器的作业可能需要一个小时才能完成。因此,同一个作业可能会运行多次,直到其中一个完成。我担心这会阻塞 Node JS 事件循环并降低服务器速度。
找到附上的架构图。我的问题是:
- 鉴于消息队列希望在 10 分钟内得到响应,我应该使用消息队列来启动这个长时间运行的作业,还是应该考虑其他一些架构?
- 如果启动多个此类作业,我是否应该担心 Node JS 事件循环被阻塞。每个作业基本上都在迭代一个 MongoDB 游标,创建数十万封电子邮件。
【问题讨论】:
-
好吧,听起来您要么不应该使用该队列(超时无法更改),要么您应该将工作分解为在超时之前很长时间很容易完成的工作。跨度>
-
我很怀疑你是否有 nodejs 事件循环阻塞问题,只要你所有的 I/O 都使用异步方法。您所做的任何事情听起来都占用大量 CPU,这就是阻塞事件循环的原因。您的整个项目可能受到 MongoDB 和您用于发送电子邮件的任何东西的限制,因此您可能应该确保您没有将其中任何一个压倒到它们变得迟缓并失去吞吐量的地步。
-
感谢您澄清我可能不必担心事件循环阻塞。
标签: node.js message-queue publish-subscribe