0

我正在尝试创建一个在特定事件发生时在后台运行的服务。例如,当用户验证电子邮件时,我希望我的服务能够删除可能的未经验证的重复电子邮件表单数据库。我尝试使用kue来保存我的目的,但我认为它更像是一旦帆起火,服务就会运行?

那么当特定事件发生时如何运行服务呢?任何帮助将非常感激。

谢谢

4

2 回答 2

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 作业。

于 2016-08-11T14:24:32.570 回答
1

也许Sails.js 生命周期钩子可以帮助你。例如,我们使用它们来更新统计信息,例如在用户更新调用后保持每种类型的用户数。

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

于 2016-08-10T19:35:06.900 回答