2016-08-10 10 views
0

Я пытаюсь сделать службу, которая работает в фоновом режиме, когда происходит определенное событие. В качестве примера, когда пользователь проверяет электронную почту, я хочу, чтобы моя служба удаляла возможную базу данных непроверенных дубликатов электронных писем. я попытался использовать kue, чтобы сохранить свою цель, но я думаю, что это больше похоже на то, что службы будут работать после того, как парус будет поднимать огонь?Выполнение фонового задания на определенное действие в парусах js

так как запустить службу при возникновении определенного события? Любая помощь приветствуется.

благодаря

ответ

1

Может Sails.js lifecycle hooks может помочь вам. Мы используем их, например, для обновления статистики, например. постоянное количество пользователей в каждом типе после вызова пользовательского обновления.

Также мы используем Node Agenda (Sails.js hook) для создания заданий, которые будут выполняться либо один раз в определенное время в будущем, либо как задание cron. Возможно, вам захочется собрать недействительные/устаревшие записи проверки адреса электронной почты, которые нужно очистить, и удалить их в почасовой партии.

2

Для этой цели вы действительно можете использовать Kue.

  1. Создайте конфигурационный файл kue.js для 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. Добавить работу в Kue в соответствующих действиях контроллера.

    var kue_engine = sails.config.kue; 
    kue_engine.create('delete_verified_email', {email: '[email protected]'}) 
        .priority('medium') 
        .attempts(3) 
        .save(); 
    
  3. Создать worker.js в корне проекта потреблять kue рабочих мест.

    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. Запускаем worker.js потреблять Kué рабочих мест, созданных вашим приложением парусами.