我们目前正在重组我们最大的项目之一。整个项目是在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/

10-15 09:52