我们目前正在重组我们最大的项目之一。整个项目是在Node.js / PHP混合环境中设置的,并且分布很广。这就是为什么我们计划对各种服务使用排队。我们在该系统中广泛使用Redis,因此遇到了我正在尝试实现的RSMQ(http://smrchy.github.io/rsmq/)。我的问题是:如何实际使用此队列执行工作程序任务或类似任务?
据我了解,它与SQS非常相似,没有任何开销-我喜欢,但是我不太确定如何真正完成它的工作。
到目前为止,我的方法(简化)如下所示:
RQ = require("rsmq");
queue = new RQ( {host: "127.0.0.1", port: 6379, ns: "nDispatch"} );
queue.receiveMessage({qname:"mq"}, function() {
// code here
});
但是问题是-我必须手动轮询队列吗?没有消息事件或类似事件吗?
最佳答案
RSMQ本身不实现任何类型的工作程序,并且被简化为队列的核心功能(我认为这是正确的方法)。
当然,尽管您可以自己实现所有功能,但我建议您使用附加模块rsmq-worker(http://smrchy.github.io/rsmq/rsmq-worker/),该模块为您的应用程序提供基本的工作程序框架。
他们在其网站上提供了一个简单但可用的示例:
var RSMQWorker = require( "rsmq-worker" );
var worker = new RSMQWorker( "myqueue" );
worker.on( "message", function( msg, next ){
// process your message
next()
});
// optional error listeners
worker.on('error', function( err, msg ){
console.log( "ERROR", err, msg.id );
});
worker.on('exceeded', function( msg ){
console.log( "EXCEEDED", msg.id );
});
worker.on('timeout', function( msg ){
console.log( "TIMEOUT", msg.id, msg.rc );
});
worker.start();
我已经以这种方式使用并实现了它,并且效果很好。工作人员会为您进行轮询,并提供错误事件,这些事件应该足以使您前进。
关于javascript - RSQM-手动轮询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30380483/