Javascript RSQM-手动轮询?

Javascript RSQM-手动轮询?,javascript,node.js,redis,queue,Javascript,Node.js,Redis,Queue,我们目前正在重组我们最大的项目之一。整个项目是在Node.js/PHP混合环境中建立的,并且是完全分布式的。这就是我们计划对各种服务使用排队的原因。我们在这个系统中广泛使用Redis,所以我遇到了我正在尝试实现的RSMQ()。我的问题是:如何使用此队列实际实现工作者任务或类似任务? 据我所知,它非常类似于没有任何开销的SQS——这是我喜欢的,但我不太确定如何真正用它完成工作 到目前为止,我的方法(简化)如下所示: RQ = require("rsmq"); queue = new RQ( {ho

我们目前正在重组我们最大的项目之一。整个项目是在Node.js/PHP混合环境中建立的,并且是完全分布式的。这就是我们计划对各种服务使用排队的原因。我们在这个系统中广泛使用Redis,所以我遇到了我正在尝试实现的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本身没有实现任何类型的工作程序,它只涉及队列的核心功能(我认为这是正确的方法)。 当然,您可以自己实现所有功能,但我建议使用额外的模块rsmqworker(),它为您的应用程序提供了基本的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();

我以这种方式使用和实现了它,它运行得非常好。工作人员为您进行轮询,并提供错误事件,这些事件应该足以让您继续。

谢谢您!这就是我要找的。很好!