我想让我的听众在我想立即删除我的消费者之后只收听一条消息。我怎样才能做到这一点。 这是代码。
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()
,但在用户界面仍然显示了消费者。
答案 0 :(得分:2)
不要使用consume
。如果您只需要收到一条消息,请使用get
方法
http://www.squaremobius.net/amqp.node/channel_api.html#channel_get
ch.get("queue-name").then(messageHandlerFunction)
这将从指定的队列中检索单个消息,并通过指定的消息处理函数
运行它