【发布时间】:2016-08-11 22:24:32
【问题描述】:
我正在尝试创建一个在特定事件发生时在后台运行的服务。例如,当用户验证电子邮件时,我希望我的服务能够删除可能的未经验证的重复电子邮件表单数据库。我尝试使用kue 来保存我的目的,但我认为它更像是一旦帆起火,服务就会运行?
那么当特定事件发生时如何运行服务呢?任何帮助将不胜感激。
谢谢
【问题讨论】:
标签: sails.js kue sails-redis
我正在尝试创建一个在特定事件发生时在后台运行的服务。例如,当用户验证电子邮件时,我希望我的服务能够删除可能的未经验证的重复电子邮件表单数据库。我尝试使用kue 来保存我的目的,但我认为它更像是一旦帆起火,服务就会运行?
那么当特定事件发生时如何运行服务呢?任何帮助将不胜感激。
谢谢
【问题讨论】:
标签: sails.js kue sails-redis
您确实可以为此目的使用Kue。
为Kue创建一个配置文件kue.js
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;
在相关控制器操作中将作业添加到Kue。
var kue_engine = sails.config.kue;
kue_engine.create('delete_verified_email', {email: '123@456.com'})
.priority('medium')
.attempts(3)
.save();
在项目根目录中创建一个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();
});
运行worker.js 以使用由您的sails 应用程序创建的kue 作业。
【讨论】:
也许Sails.js lifecycle hooks 可以帮助你。例如,我们正在使用它们来更新统计信息,例如在用户更新调用后,每种类型的用户数保持不变。
我们还使用Node Agenda (Sails.js hook) 创建要在未来某个时间执行的作业,或者像 cron 作业一样执行。也许您会希望收集无效/过期的电子邮件地址验证条目以每小时进行一次清除并删除它们。
【讨论】: