RSQM - 手动轮询?

RSQM - polling manually?

我们目前正在重组我们最大的项目之一。整个项目设置在 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 本身不实现任何类型的 worker,并且被剥离到队列的核心功能(我认为这是正确的方法)。 虽然您当然可以自己实现所有内容,但我建议您使用附加模块 rsmq-worker (http://smrchy.github.io/rsmq/rsmq-worker/),它为您的应用程序提供基本的 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();

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