【问题标题】:Does Node.js need a job queue?Node.js 需要作业队列吗?
【发布时间】:2017-11-22 09:44:21
【问题描述】:

假设我有一个发送电子邮件的快递服务:

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

这行得通。

我想知道在这里引入作业队列有什么好处?喜欢Kue

【问题讨论】:

    标签: node.js


    【解决方案1】:

    基本上,队列的目的只是让您更好地控制它们的执行。

    这可能用于限制发送的数量、优先考虑其他操作、平衡流量(即,如果同时发送 10000 个,则不要尝试同时发送所有 10000 个时间并杀死你的服务器)。

    您使用队列的具体用途,以及它是否有任何好处,取决于您的实际情况和用例。归根结底,就是控制流量。

    【讨论】:

      【解决方案2】:

      Node.js 需要作业队列吗?

      不是通用的。

      作业队列是为了解决一个特定的问题,通常比单个 node.js 进程一次可以处理更多的事情,所以你“排队”要做的事情,甚至可以将它们分配给其他进程来处理。

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

      我看不出你展示的代码有任何理由使用作业队列,除非你同时做了很多这样的事情。

      您提到的特定 https://github.com/OptimalBits/bull 库或 Kue library 在其 NPM 页面上列出了这些功能:

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

      所以,我认为如果您需要一些特定的队列功能,您会添加一个队列,并且如果 Kue 库具有针对您的特定问题的最佳功能集,您会使用它。

      p>

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

      【讨论】:

      • @wong2 - 这回答了你的问题吗?
      • 2019 年的评论:Kue 现在无人维护,建议改用npmjs.com/package/bull
      • @BornToCode - 队列具有特定情况,因为您想要或需要队列具有的特定功能。对于与微服务的所有通信,这并不是您通常需要或想要的。
      • @BornToCode - 无需排队即可进行火灾和忘记呼叫。
      • @BornToCode - 如果您有具体的问题要问,请写下您自己的问题。对不同问题的评论不是为了讨论您的具体问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2011-07-17
      相关资源
      最近更新 更多