Frage

Ich frage mich, ob es eine Möglichkeit gibt, Hintergrundaufgaben umzusetzen, vielleicht mit einem Arbeiterpool.Können Sie mir die Richtung zeigen, ich denke darüber nach, ein Paket dafür zu schreiben?

War es hilfreich?

Lösung

Aktualisierung 2019

Bevor Sie darüber nachdenken, ein Paket für irgendetwas zu schreiben, prüfen Sie zunächst, ob es bereits Pakete gibt, die das tun, was Sie brauchen.In der Meteor-Welt bedeutet dies, dass Sie in Atmosphere nach „Job/Queue/Task/Worker Management/Scheduling“-Paketen suchen und dann in npm nach denselben Suchbegriffen.Außerdem müssen Sie Ihre Anforderungen genauer definieren:

  • Möchten Sie Persistenz oder würde eine In-Memory-Lösung funktionieren?
  • Möchten Sie Aufträge auf verschiedene Maschinen verteilen können?

Meteorspezifisch

  • Job-Sammlung - zuverlässig (ich habe es 2014 in der Produktion bei einem Startup verwendet), aber derzeit im Wartungsmodus.Ermöglicht Ihnen die Planung dauerhafter Jobs, die überall ausgeführt werden sollen (Server, Clients).
  • Steve Jobs - Aktiv gepflegt von Max Savin, dem Autor mehrerer leistungsstarke Meteor-Tools
  • littledata:synced-cron - „Ein einfaches Cron-System für Meteor.Es unterstützt die Synchronisierung von Jobs zwischen mehreren Prozessen.“

Verlassene Pakete:

Npm-Pakete

Da Meteor seit einigen Jahren npm-Pakete direkt verwenden kann, kommt diese Frage einer Feststellung gleich Job-/Worker-/Warteschlangenverwaltungspakete auf NPM.Wenn Ihnen Beständigkeit egal ist:

  • Asynchron „bietet rund 70 Funktionen, darunter die üblichen ‚funktionalen‘ Verdächtigen (map, reduce, filter, each...) sowie einige gängige Muster für den asynchronen Kontrollfluss (parallel, series, waterfall...)"
  • d3-Warteschlange - minimalistisch, geschrieben von D3-Autor Mike Bostock

Wenn Sie Persistenz wünschen, kann es von Vorteil sein, ein Jobplanungspaket mit Persistenz für MongoDb zu verwenden, da Meteor bereits MongoDB verwendet.Das mächtigste und beliebteste scheint zu sein Agenda, aber leider wurde es seit Monaten nicht mehr gewartet und es gibt einen erheblichen Rückstand Probleme.

Wenn Sie bereit sind, eine Abhängigkeit hinzuzufügen, die von unterstützt wird redis Für Ihr Projekt gibt es weitere Auswahlmöglichkeiten:

Wie MongoDB kann auch Redis Hochverfügbarkeit bieten (über Redis Sentinel), und wenn Sie Jobs auf mehrere Arbeitsmaschinen verteilen möchten, ist dies möglich Richten Sie sie alle auf denselben Redis-Server.

Andere Tipps

Es gibt ein Paket, das auf Cron-Jobs basiert, die zur Planung von Aufgaben in bestimmten Abständen oder Terminen verwendet werden können.Hier ist das Paket: https://atmosphäre.metor.com/package/cron

.

Und wenn Sie zufällig in die Quelle dieses Pakets eingehen, werden Sie feststellen, dass sie einfach verwenden:

Meteor.setInterval( ... , delay );

Wenn Sie also Ihre Aufgaben in einer Datenbank speichern, laden Sie sie während des Startups in Intervalle, dann werden Sie wahrscheinlich auf der rechten Spur sein.

Wenn Sie nach etwas suchen, das für Meteor spezifisch ist, freue ich mich, dort ein neues Paket namens Steve Jobs zu teilen.Es macht laufende Hintergrundaufträge so einfach wie eine Methode anzurufen.

Es verfügt über alle Standardfunktionen, die Sie erwarten würden, z. B. beim Ausführen eines Jobs nur einmal, um fehlgeschlagene Jobs wiederholt, und so weiter.Sie können mehr darüber erfahren auf Github:

http://github.com/msavin/stevejobs

Ich gehe davon aus, dass die richtige Unterstützung auf ihrer Roadmap steht, aber in der Zwischenzeit habe ich es geschafft, es auf ziemlich schwierige Weise in Gang zu bringen setInterval.Siehe die Cron-Tick Paket.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top