Compiti di sfondo in Meteor
-
13-12-2019 - |
Domanda
Mi chiedo, se c'è un modo per implementare compiti di sfondo, magari con la piscina dei lavoratori.Puoi mostrarmi la direzione, sto pensando a scrivere il pacchetto per questo?
Soluzione
Aggiornamento 2019
Prima di pensare di scrivere un pacchetto per qualsiasi cosa, il primo aspetto se ci sono pacchetti esistenti che fanno ciò di cui hai bisogno. Nel mondo di Meteor, questo significa guardare l'atmosfera per "lavori / coda / attività / gestione / gestione / pianificazione" pacchetti, quindi su NPM per gli stessi termini di ricerca. Devi anche definire i tuoi requisiti più precisamente:
- .
- vuoi perseverare o una soluzione in-memoria funziona?
- Vuoi essere in grado di distribuire lavori a macchine diverse?
Meteor-specific
- .
- Collezione di lavoro - affidabile (l'ho usato nel 2014 in produzione a Un avvio), ma attualmente in modalità manutenzione. Consente di pianificare lavori persistenti da eseguire ovunque (server, client).
- Stevejobs - Mantenuto attivamente da Max Savin, l'autore di diversi Potenti strumenti Meteor
- Littlatata: Syncry-Cron - "Un semplice sistema di cron per Meteor. Supporta i lavori di sincronizzazione tra più processi. "
Pacchetti abbandonati:
- .
- Artwells: coda - Priorità, Pianificazione, Registrazione, Riunità. Coda sostenuta da mongodb. Ultimo Codice commit : 2015-ott.
- Pacchetti Super Basic Cron: easycron . Ultimo aggiornamento: DEC 2015.
- differenziale: lavoratori - spawn weadless worker meteor processes per lavorare su Jobs Async. Ultimo codice commit : gen 2015
- Cron ( Dal 2015 )
- PowerQueue - Abbandonato Dal 2014 . Attività in coda Async, utilizzo delle risorse dell'acceleratore, Riprova non riuscita. Supporta le code secondarie. Nessuna programmazione . Nessun test, ma nifty demo . Non adatto per correre per un lungo periodo dovuto all'utilizzo di chiamate ricorsive .
Pacchetti NPM
Meteor è stato in grado di utilizzare i pacchetti NPM direttamente da diversi anni, quindi questa domanda equivale a trovare Pacchetti di lavoro / lavoratore / coda su NPM. Se non ti importa della persistenza:
- .
- asinnc "fornisce circa 70 funzioni che includono i soliti sospetti" funzionali "(
map
,reduce
,filter
,each
...) e alcuni modelli comuni per flusso di controllo asincrono (parallel
,series
,waterfall
...) " - D3-code - minimalistic, scritto da D3 Autore Mike Bostock
Se vuoi perseverare, poiché Meteor utilizza già MongoDB, potrebbe essere vantaggioso utilizzare un pacchetto di pianificazione del lavoro con persistenza a mongodb. Il più potente e popolare sembra essere
Se sei disposto ad aggiungere una dipendenza sostenuta da redis al tuo progetto, ci sono più scelte: < / P >.
- .
- Bull - La soluzione di coda di lavoro più completa per il nodo, supportato da redis
- Ape - Semplice, veloce, robusto. Non soffre di un perdita di memoria che Bull Eashits
Come Mongodb, Redis può anche fornire la disponibilità di alta disponibilità (via Redis Sentinel) e se si desidera distribuire posti di lavoro tra più macchine di lavoro, è possibile Punta tutti nello stesso server Redis .
Altri suggerimenti
Esiste un pacchetto basato su lavori di cron che possono essere utilizzati per pianificare attività su determinati intervalli o date.Ecco il pacchetto: https://atmosphere.meteor.com/package/cron E se ti capita di esaminare la fonte di quel pacchetto, noterai semplicemente usando:
Meteor.setInterval( ... , delay );
Quindi se si salvano le attività in un database, quindi caricarli in intervalli durante l'avvio, allora probabilmente sarai sulla strada giusta.
Se stai cercando qualcosa che è specifico per Meteor, sono felice di condividere che c'è un nuovo pacchetto chiamato Steve Jobs.Rende il funzionamento dei lavori in background come chiamare un metodo.
ha tutte le funzionalità standard che ti aspetteresti, ad esempio l'esecuzione di un lavoro solo una volta, riprovare i lavori falliti e così via.Puoi saperne di più su di esso su GitHub:
Indovina che il supporto corretto sia sulla loro tabella di marcia, ma nel frattempo sono riuscito a farlo entrare in modo hacky tramite setInterval
.Vedi il Cron-tick pacchetto.