我们正在尝试使用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'响应但是当我发布到一个根本不存在的队列时,在发布回调中,我们仍然得到一个'错误的'回应;为什么会这样?有没有什么方法可以在发布之前检查队列是否存在?
答案 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;
});