web-dev-qa-db-fra.com

Tâches d'arrière-plan dans Meteor

Je me demande s'il existe un moyen de mettre en œuvre une tâche en arrière-plan, peut-être avec un pool de travailleurs. Pouvez-vous me montrer la direction, je pense à écrire un package pour cela?

58
Leonid Bugaev

Mise à jour 2019

Avant de penser à écrire un package pour quoi que ce soit, regardez d'abord s'il existe des packages qui font ce dont vous avez besoin. Dans le monde Meteor, cela signifie rechercher dans Atmosphère des packages "gestion des tâches/files d'attente/tâches/travailleurs/planification", puis sur npm pour les mêmes termes de recherche. Vous devez également définir plus précisément vos besoins:

  • voulez-vous la persistance, ou une solution en mémoire fonctionnerait-elle?
  • voulez-vous pouvoir répartir les tâches sur différentes machines?

Spécifique aux météores

  • job-collection - fiable (je l'ai utilisé en 2014 en production dans une startup), mais actuellement en mode maintenance. Vous permet de planifier des travaux persistants à exécuter n'importe où (serveurs, clients).
  • SteveJobs - activement maintenu par Max Savin, l'auteur de plusieurs puissants outils Meteor
  • littledata: synced-cron - "Un système cron simple pour Meteor. Il prend en charge les tâches de synchronisation entre plusieurs processus."

Paquets abandonnés:

Forfaits NPM

Meteor est capable d'utiliser des packages npm directement depuis plusieurs années maintenant, donc cette question revient à trouver packages de gestion de travail/travailleur/file d'attente sur NPM. Si vous ne vous souciez pas de la persistance:

  • Async "fournit environ 70 fonctions qui incluent les suspects" fonctionnels "habituels (map, reduce, filter, each. ..) ainsi que certains modèles courants de flux de contrôle asynchrone (parallel, series, waterfall...) "
  • d3-queue - minimaliste, écrit par l'auteur D3 Mike Bostock

Si vous voulez de la persistance, étant donné que Meteor utilise déjà MongoDB, il peut être avantageux d'utiliser un package de planification de travaux avec persistance pour MongoDb. Le plus puissant et le plus populaire semble être Agenda , mais malheureusement il n'a pas été maintenu depuis des mois, et il a un arriéré important de problèmes .

Si vous êtes prêt à ajouter une dépendance soutenue par redis à votre projet, il y a plus de choix:

Comme MongoDB, Redis peut également fournir une haute disponibilité (via Redis Sentinel), et si vous souhaitez répartir les tâches entre plusieurs machines de travail, vous pouvez les pointer toutes sur le même serveur Redis .

107
Dan Dascalescu

Si vous recherchez quelque chose de spécifique à Meteor, je suis heureux de partager qu'il existe un nouveau package appelé Steve Jobs. Cela rend l'exécution des tâches en arrière-plan aussi simple que d'appeler une méthode.

Il possède toutes les fonctionnalités standard que vous attendez, telles que l'exécution d'une tâche une seule fois, la nouvelle tentative de tâches ayant échoué, etc. Vous pouvez en savoir plus sur GitHub:

http://github.com/msavin/stevejobs

2
Max Savin

Il existe un package basé sur les tâches Cron qui peut être utilisé pour planifier des tâches à certains intervalles ou à certaines dates. Voici le package: https://atmosphere.meteor.com/package/cron

Et si vous cherchez la source de ce paquet, vous remarquerez qu'ils utilisent simplement:

Meteor.setInterval( ... , delay );

Donc, si vous enregistrez vos tâches dans une base de données, puis les chargez à intervalles au démarrage, vous serez probablement sur la bonne voie.

2
miketucker

Je suppose que le support approprié est sur leur feuille de route, mais en attendant, j'ai réussi à le faire fonctionner de manière hacky via setInterval. Voir le package cron-tick .

0
Tom Coleman