2016-08-10 2 views
0

특정 이벤트가 발생할 때 백그라운드에서 실행되는 서비스를 만들려고합니다. 예를 들어 사용자가 전자 메일을 확인할 때 미확인 된 중복 전자 메일 양식 데이터베이스를 삭제하는 서비스를 원합니다. 나는 내 목적을 저장하기 위해 kue을 사용해 보았습니다.하지만 돛이 불을지면 서비스가 더 많이 실행될 것이라고 생각합니까?돛의 특정 작업에 백그라운드 작업 실행 js

특정 이벤트가 발생했을 때 서비스를 실행하는 방법은 무엇입니까? 어떤 도움을 많이 주시면 감사하겠습니다.

감사

답변

1

어쩌면 Sails.js lifecycle hooks 당신을 도울 수 있습니다. 예를 들어 통계를 업데이트하기 위해이를 사용하고 있습니다. 사용자 업데이트 호출 후 형식 당 지속되는 사용자 수.

또한 우리는 Node Agenda (Sails.js hook)을 사용하여 미래의 정의 된 시간 또는 cron 작업과 같이 한 번만 실행될 작업을 생성합니다. 어쩌면 유효하지 않은 유효 기간이 만료 된 전자 메일 주소 확인 항목을 수집하여 시간별 배치에서 삭제할 수 있습니다.

2

실제로이 목적으로 Kue을 사용할 수 있습니다.

  1. 관련 컨트롤러 액션에 Kue에 작업을 추가 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.js을 만듭니다.

    var kue_engine = sails.config.kue; 
    kue_engine.create('delete_verified_email', {email: '[email protected]'}) 
        .priority('medium') 
        .attempts(3) 
        .save(); 
    
  3. kue 작업을 소비하는 프로젝트 루트에 worker.js을 만듭니다.

    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 당신의 돛 응용 프로그램에 의해 생성 된 KUE 작업을 소비합니다.

관련 문제