使用nodeJS删除RabbitMQ中的使用者

时间:2016-06-08 07:31:29

标签: javascript node.js rabbitmq sails.js

我想让我的听众在我想立即删除我的消费者之后只收听一条消息。我怎样才能做到这一点。 这是代码。

  queueListener:function(Queue,timeOut){
    var deferred=sails.promise.defer(),timer,data;
    sails.amqp.connect('amqp://localhost', function(err, conn) {
      conn.createConfirmChannel(function(err, ch) {
        if(err){
          conn.close();
          deferred.reject(err);
        }else{
          ch.assertQueue(Queue, {durable: true});
          ch.prefetch(1);
          ch.consume(Queue,function(msg){
            data=msg.content.toString();
            clearTimeout(timer);
            ch.ack(msg);
            setTimeout(function(){
              conn.close();
              deferred.resolve(data);
            },0);
          },{noAck: false});
        }
      });
      timer=setTimeout(function(){
        conn.close();
        deferred.reject(new Error("Nothing in the Queue."));
      },timeOut-5);
    });
    return deferred.promise;
  }
上面队列中的

是它将侦听的队列,timeOut表示我的侦听器将侦听多长时间。 如果它侦听我想要停止收听的消息。为了进一步收听,我将在下次调用 queueListner 函数。 虽然我已经制作了conn.close(),但在用户界面仍然显示了消费者。 enter image description here

1 个答案:

答案 0 :(得分:2)

不要使用consume。如果您只需要收到一条消息,请使用get方法

http://www.squaremobius.net/amqp.node/channel_api.html#channel_get

ch.get("queue-name").then(messageHandlerFunction)

这将从指定的队列中检索单个消息,并通过指定的消息处理函数

运行它