2017-06-20 4 views
1

sagen, dass ich einen Express-Service haben, die E-Mail sendet:Benötigt Node.js eine Jobwarteschlange?

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

das funktioniert.

Ich würde gerne wissen, was ist der Vorteil der Einführung einer Job-Warteschlange hier? wie Kue.

Antwort

2

Im Grunde wäre der Punkt einer Warteschlange einfach, Ihnen mehr Kontrolle über ihre Ausführung zu geben.

Dies könnte für Dinge wie Drosseln, wie viele Sie senden, die Priorität auf andere Aktionen zuerst, glätten den Fluss (dh, wenn 10000 gleichzeitig gesendet werden, versuchen Sie nicht, alle 10000 an der senden gleichzeitig und töte deinen Server).

Wofür Sie Ihre Warteschlange genau verwenden und ob dies von Vorteil wäre, hängt von Ihrer tatsächlichen Situation und den Anwendungsfällen ab. Am Ende des Tages geht es nur darum, den Fluss zu kontrollieren.

3

Benötigt Node.js eine Jobwarteschlange?

Nicht generisch. Eine Jobwarteschlange soll ein bestimmtes Problem lösen, normalerweise mit mehr zu tun, als ein einzelner node.js-Prozess sofort verarbeiten kann, so dass Sie Dinge "in die Warteschlange stellen" und sie sogar an andere Prozesse weiterreichen können .

Möglicherweise haben Sie sogar Prioritäten für verschiedene Arten von Aufträgen oder möchten die Ausführungsrate von Aufträgen steuern (vorausgesetzt, Sie haben ein Limit, müssen Sie auf einem externen Server bleiben oder einfach nicht überfordern) ein anderer Server). Sie können auch nodejs clustering verwenden, um die Anzahl der Aufgaben zu erhöhen, die Ihr Knotenserver verarbeiten kann. Eine Warteschlange besteht also darin, die Ausführung einiger CPU- oder ressourcenintensiver Tasks zu steuern, wenn Sie mehr davon zu erledigen haben, als Ihr Server auf einmal ausführen kann. Eine Warteschlange gibt Ihnen die Kontrolle über den Ausführungsablauf.

Ich sehe keinen Grund für den Code, den Sie zeigen, um eine Jobwarteschlange zu verwenden, es sei denn, Sie haben viele von diesen auf einmal gemacht.

Die spezifische Kue library erwähnen Sie listet diese Funktionen auf der NPM Seite:

  • Verzögerte Jobs
  • Verteilung von parallelen Arbeitsbelastung
  • Job Ereignis und Fortschritt PubSub
  • Job TTL
  • Optional Versuche mit Backoff
  • Graceful Worker Shutdown
  • Volltextsuche
  • RESTful JSON API
  • Rich-integrierte UI
  • Infinite Scrolling
  • UI Fortschrittsanzeige
  • Job spezifische Protokollierung

Also, ich denke, es ist selbstverständlich, dass Sie eine Warteschlange hinzufügen würden, wenn Sie bestimmte Warteschlangenfunktionen benötigen, und Sie würden die Bibliothek Kue verwenden, wenn sie die besten Funktionen für Ihr spezielles Problem hätte.


Falls es darauf ankommt, ist Ihr Code res.send("ok") sendet, bevor es mit den Asynchron-Aufgaben beendet und bevor Sie wissen, ob es oder nicht erfolgreich war. Manchmal gibt es Gründe, das zu tun, aber manchmal möchten Sie zurück kommunizieren, ob die Operation erfolgreich war oder nicht (was Sie nicht tun).

+0

@ wong2 - Hat dies Ihre Frage beantwortet? – jfriend00

Verwandte Themen