使用节点amqp库检查RabbitMQ中是否存在队列的方法

时间:2014-06-24 09:52:51

标签: node.js rabbitmq

我们正在尝试使用nodejs,rabbitmq和mongodb构建聊天应用程序。为了更快地传递消息,我们使用rabbitmq。由于我是这个概念的新手,如果有人可以,请帮助我。我正在使用节点amqp模块连接到rabbitmq服务器(https://www.npmjs.org/package/amqp)。

我宣布交换如下:

var amqp = require('amqp'); var amqpconnection = amqp.createConnection({host:'localhost'}); var exchange = amqpconnection.exchange('Exchange',{confirm:true,type:“direct” ,durable:true,autoDelete:false},function(exchange){});

我正在使用以下方法发布消息:

exchange.publish('receiver_queue',message,{persistent:true,mandatory:true},function(data){console.log(“Message Published”); console.log(data);});

我的问题是,当我发布到已经存在的队列时,在发布回调中,我们得到一个'false'响应但是当我发布到一个根本不存在的队列时,在发布回调中,我们仍然得到一个'错误的'回应;为什么会这样?有没有什么方法可以在发布之前检查队列是否存在?

2 个答案:

答案 0 :(得分:1)

这可以被视为反模式,即:大多数消息传递应用程序使用 fire并忘记样式,其中发布者不关心谁接收消息。

现在,如果您需要确保将消息路由到某个队列,那么您可以在发布消息时使用mandatory标志。

要知道队列是否存在,您可以使用queue_declare,但在发送queue.declare

时传递passive = true标志。

答案 1 :(得分:0)

试试这段代码。

connection.exchange('Exchange', {type: 'topic', confirm: true,passive:true},function(exchange) {
publish = exchange.publish(Queue, xml, { mandatory: false });
return true;

});