Node.js是否需要一个作业队列?

时间:2017-06-20 02:52:13

标签: node.js

说我有快递服务发送电子邮件:

app.post('/send', function(req, res) {
  sendEmailAsync(req.body).catch(console.error)
  res.send('ok')
})

这有效。

我想知道在这里引入职位队列的优势是什么?比如Kue

2 个答案:

答案 0 :(得分:10)

  

Node.js是否需要一个作业队列?

不是一般的。

作业队列是解决特定问题的,通常比单个node.js进程可以处理更多事情,因此您可以“排队”要做的事情,甚至可以将它们发送到其他进程来处理。

您甚至可能拥有不同类型作业的优先级,或者想要控制作业执行的速率(假设您有一个速率限制上限,您必须在某些外部服务器上保持低于或者只是不想压倒一些其他服务器)。还可以使用nodejs群集来增加节点服务器可以处理的任务量。因此,当您有更多操作要比服务器可以一次轻松执行时,队列就是控制某些CPU或资源密集型任务的执行。队列使您可以控制执行流程。

我没有看到您显示的代码使用作业队列的任何原因,除非您一次完成了很多这些。

您提到的具体Kue library在其NPM页面上列出了这些功能:

  • 延迟工作
  • 并行工作负荷的分配
  • 工作事件和进展pubsub
  • 工作TTL
  • 带退避的可选重试
  • 优雅的工作人员关闭
  • 全文搜索功能
  • RESTful JSON API
  • 丰富的集成UI
  • 无限滚动
  • UI进度指示
  • 特定于作业的日志记录

所以,我认为如果您需要一些特定的排队功能,并且如果它具有针对您的特定问题的最佳功能集,则您将使用Kue库,这是不言而喻的。

如果重要,您的代码在完成异步任务之前以及在您知道它是否成功之前发送res.send("ok")。有时候有理由这样做,但有时你想要回复操作是否成功(你没有做)。

答案 1 :(得分:3)

基本上,队列的重点只是让你更好地控制他们的执行。

这可以用于限制你发送的数量,首先优先考虑其他行动,晚上流出(即,如果10000同时发送,你不要尝试同时发送所有10000时间并杀死你的服务器。)

您使用队列究竟是什么,以及它是否有任何好处,取决于您的实际情况和用例。在一天结束时,它只是控制流量。