这是我遇到的问题
1.如果首先启动接收器,然后发送消息,则发送消息
2但是如果接收器没有启动,那么代码表示发送了消息,但是启动接收器却没有收到消息。
如果我在python中使用pika尝试相同的序列似乎正常工作。
我还验证了没有使用rabbitmqctl --list_queues命令的消息
我正在运行node.js 0.70并在Ubuntu 11.04 64位版本上运行
我的send.js
中有以下代码 var util= require('util')
var amqp = require('amqp');
var connection = amqp.createConnection({host:'localhost',
login:'guest',
password:'guest'});
var pubMessage = function pubM(msg) {
var x = connection.exchange();
var q = connection.queue('helloNode',
{ autoDelete: true, durable: false, exclusive: false }
);
x.publish('helloNode',{helloNode: "This is a message"});
};
connection.addListener('ready', pubMessage);
console.log(" Sent a message ");
以及我的接收器中的以下代码
var util= require('util')
var amqp = require('amqp');
var connection = amqp.createConnection({host:'localhost',
login:'guest',
password:'guest'});
connection.on('ready', function () {
var q = connection.queue('helloNode',
{ autoDelete: true, durable: false, exclusive: false }
);
q.bind('#');
q.subscribe(function (message) {
util.p(message);
});
});
答案 0 :(得分:1)
您的队列绑定正在使用autoDelete设置:true。使用此设置,如果接收器未连接(或断开连接),则没有队列将消息路由到。设置autoDelete:false即使接收器离线也会保持队列完整,并且会继续产生消息。
答案 1 :(得分:0)
将邮件路由到“helloNode”队列,然后在发件人终止此队列时删除。即使使用“exclusive:false”也是如此,因为在您的发件人中创建了此队列的订阅。鉴于此,行为“如果在队列中没有激活订阅它将不会被自动删除”这里不适用。
也许pika会创建具有不同值的交换/队列?