RSQM – 手动轮询?

我们正在重组我们最大的项目之一。 整个项目build立在一个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本身并没有实现任何types的工作,而是被排除在队列的核心function(在我看来是正确的方法)。 虽然你可以自己实现所有的东西,但我build议使用附加模块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(); 

我用这种方式来实现它,它工作得很好。 工作人员为您进行投票,并提供应该足以让您前进的错误事件。