RSQM - 手动轮询?

时间:2015-05-21 17:24:56

标签: javascript node.js redis queue

我们目前正在重组我们最大的项目之一。整个项目是在Node.js / PHP混合环境中建立的,并且非常分散。这就是我们计划使用排队进行各种服务的原因。我们在这个系统中广泛使用Redis,所以我遇到了我想要实现的RSMQ(http://smrchy.github.io/rsmq/)。我的问题是:如何使用此队列实际实现工作任务或类似工作? 据我了解,它与SQS非常类似,没有任何开销 - 我喜欢,但我不太确定如何真正完成工作。

到目前为止,我的方法(简化)看起来像这样:

String format = "h:mma"; // for example
Double d = 1.40669949E12;
String formattedStr = new SimpleDateFormat(format).format(new Date(Math.round(d)));

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

1 个答案:

答案 0 :(得分:3)

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

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