2016-08-10 2 views
0

Ich versuche, einen Dienst zu machen, der im Hintergrund ausgeführt wird, wenn ein bestimmtes Ereignis eintritt. Als ein Beispiel, wenn Benutzer E-Mails überprüft, möchte ich, dass mein Dienst mögliche ungeprüfte doppelte E-Mails aus der Datenbank löscht. Ich versuchte, kue zu verwenden, um meinen Zweck zu speichern, aber ich denke, dass es eher wie die Dienstleistungen laufen wird, sobald die Segel Feuer anheben?Hintergrundjob auf einer bestimmten Aktion in Segeln ausgeführt js

also, wie man einen Dienst ausführt, wenn ein bestimmtes Ereignis eintritt? jede Hilfe würde sehr geschätzt werden.

dank

Antwort

1

Vielleicht Sails.js lifecycle hooks könnte Ihnen helfen. Wir verwenden sie beispielsweise, um Statistiken zu aktualisieren, z. persistente Anzahl von Benutzern pro Typ nach einem Benutzeraktualisierungsanruf.

Wir verwenden auch Node Agenda (Sails.js hook), um Jobs zu erstellen, die entweder einmal zu einer definierten Zeit in der Zukunft oder wie ein Cron-Job ausgeführt werden. Vielleicht möchten Sie die zu löschenden ungültigen/abgelaufenen Bestätigungseinträge für die E-Mail-Adresse sammeln und in einem stündlichen Batch löschen.

2

Sie können tatsächlich Kue für diesen Zweck verwenden.

  1. Erstellen Sie eine Konfigurationsdatei kue.js für Kue

    var kue = require('kue'); 
    var kue_engine = kue.createQueue({ 
        prefix: 'kue', 
        redis: { 
        port: '6379', 
        host: 'localhost' 
        } 
    }); 
    
    
    process.once('SIGTERM', function (sig) { 
        kue_engine.shutdown(5000, function(err) { 
        console.log('Kue shutdown: ', err||''); 
        process.exit(0); 
        }); 
    }); 
    
    module.exports.kue = kue_engine; 
    
  2. den Job zu Kue in entsprechenden Controller-Aktion hinzufügen.

    var kue_engine = sails.config.kue; 
    kue_engine.create('delete_verified_email', {email: '[email protected]'}) 
        .priority('medium') 
        .attempts(3) 
        .save(); 
    
  3. ein worker.js in Projektstamm erstellen kue Jobs zu konsumieren.

    var kue = require('kue'); 
    require('sails').load({ 
        hooks: { 
         blueprints: false, 
         cors: false, 
         csrf: false, 
         grunt: false, 
         http: false, 
         i18n: false, 
         logger: false, 
         policies: false, 
         pubsub: false, 
         request: false, 
         responses: false, 
         session: false, 
         sockets: false, 
         views: false 
         } 
        }, function (err, app) { 
          sails.log.info('Starting kue'); 
          var kue_engine = sails.config.kue; 
    
          //register kue. 
    
          kue_engine.on('job complete', function (id) { 
           sails.log.info('Removing completed job: ' + id); 
           kue.Job.get(id, function (err, job) { 
            job.remove(); 
           }); 
          }); 
          kue_engine.process('delete_verified_email', 20, function (job, done) { 
           // you can access the data passed while creating job at job.data 
           // all the sails models, services are available here 
           console.log(job.data.email) 
           done && done(); 
          }); 
    
  4. Führen Sie das worker.js die kue Arbeitsplätze durch den Segeln App erstellt zu konsumieren.

Verwandte Themen