2017-06-20 151 views
1

说我有一个快递服务,它发送电子邮件:Node.js是否需要作业队列?

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

这个工程。

我想知道在这里引入工作队列的优点是什么?像Kue

回答

2

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

这可能是因为扼杀了你发送的数量,优先考虑其他动作,晚上流出(例如,如果10000同时发送,你不会尝试发送全部10000同时并杀死你的服务器)。

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

3

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

不是一般的。

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

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

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

具体Kue library你提到的名单及其NPM页面上这些功能:

  • 延迟工作
  • 分布并行工作负载的
  • 工作事件和进展发布订阅
  • 工作TTL
  • 可选退役重试
  • 优雅员工关机
  • 全文搜索功能
  • 的RESTful JSON API
  • 丰富的集成UI
  • 无限滚动
  • UI进度指示
  • 工作的具体记录

所以,我想不言而喻如果你需要一些特定的排队功能,你会添加一个队列,如果你的特定问题有最好的功能,你可以使用Kue库。


如果它的事项,你的代码发送res.send("ok")它与异步任务完成之前,你知道,如果它成功与否之前。有时候有理由这样做,但有时候你想传达回去操作是否成功(你不这么做)。

+0

@ wong2 - 这是否回答了您的问题? – jfriend00