在sails js中的特定操作上运行后台作业

时间:2016-08-10 12:23:38

标签: sails.js kue sails-redis

我正在尝试在特定事件发生时制作在后台运行的服务。作为用户验证电子邮件的示例,我希望我的服务可以删除可能未经验证的重复电子邮件形式的数据库。我尝试使用kue来保存我的目的,但我认为它更像是一旦帆升起火灾就会运行服务?

那么如何在特定事件发生时运行服务?任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分: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: '123@456.com'})
      .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以使用sails应用创建的kue作业。

答案 1 :(得分:1)

也许Sails.js lifecycle hooks可以帮到你。我们正在使用它们来更新统计数据,例如用户更新呼叫后,每种类型的用户数量持续存在。

此外,我们正在使用Node Agenda (Sails.js hook)创建要在未来一定时间内执行的作业,或者像cron作业一样。也许您希望收集要清除的无效/过期电子邮件地址验证条目,并按小时批量删除它们。