【发布时间】:2017-11-22 09:44:21
【问题描述】:
假设我有一个发送电子邮件的快递服务:
app.post('/send', function(req, res) {
sendEmailAsync(req.body).catch(console.error)
res.send('ok')
})
这行得通。
我想知道在这里引入作业队列有什么好处?喜欢Kue。
【问题讨论】:
标签: node.js
假设我有一个发送电子邮件的快递服务:
app.post('/send', function(req, res) {
sendEmailAsync(req.body).catch(console.error)
res.send('ok')
})
这行得通。
我想知道在这里引入作业队列有什么好处?喜欢Kue。
【问题讨论】:
标签: node.js
基本上,队列的目的只是让您更好地控制它们的执行。
这可能用于限制发送的数量、优先考虑其他操作、平衡流量(即,如果同时发送 10000 个,则不要尝试同时发送所有 10000 个时间并杀死你的服务器)。
您使用队列的具体用途,以及它是否有任何好处,取决于您的实际情况和用例。归根结底,就是控制流量。
【讨论】:
Node.js 需要作业队列吗?
不是通用的。
作业队列是为了解决一个特定的问题,通常比单个 node.js 进程一次可以处理更多的事情,所以你“排队”要做的事情,甚至可以将它们分配给其他进程来处理。
您甚至可能对不同类型的作业有优先级,或者想要控制作业的执行速率(假设您有一个速率限制上限,您必须在某些外部服务器上保持低于此上限,或者只是不想压倒一些其他服务器)。还可以使用 nodejs 集群来增加节点服务器可以处理的任务量。因此,队列是关于控制某些 CPU 或资源密集型任务的执行,当您有更多的事情要做时,您的服务器可以轻松地一次执行。队列让您可以控制执行流程。
我看不出你展示的代码有任何理由使用作业队列,除非你同时做了很多这样的事情。
您提到的特定 https://github.com/OptimalBits/bull 库或 Kue library 在其 NPM 页面上列出了这些功能:
所以,我认为如果您需要一些特定的队列功能,您会添加一个队列,并且如果 Kue 库具有针对您的特定问题的最佳功能集,您会使用它。
如果重要,您的代码会在完成异步任务之前以及在您知道它是否成功之前发送res.send("ok")。有时这样做是有原因的,但有时您想反馈操作是否成功(您没有这样做)。
【讨论】: