【问题标题】:RSQM - polling manually?RSQM - 手动轮询?
【发布时间】:2015-08-03 12:27:51
【问题描述】:

我们目前正在重组我们最大的项目之一。整个项目设置在 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
});

但问题是 - 我必须手动轮询队列吗?有没有消息事件之类的?

【问题讨论】:

    标签: javascript node.js redis queue


    【解决方案1】:

    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();
    

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

    【讨论】:

    • 谢谢你exinferis!这就是我要找的。效果很好!
    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多