2017-06-20 67 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