我正在学习MQTT并面临一些问题,从http://blog.airasoul.io/the-internet-of-things-with-rabbitmq-node-js-mqtt-and-amqp/了解了使用RabbitMQ的MQTT。
所以,这里的问题是当我运行发布者代码时,会添加一个队列 mqtt-subscription-test-qos1 但是当我的消息没有添加到该队列中时。虽然我已经使用键绑定'presence'添加了amq.topic与此队列的绑定。
这是我的发布商代码
var payload = {
message : 'Hello'
};
var client = mqtt.connect(url, { clientId: 'test-', clean:true});
client.on('connect', function () {
client.publish('presence', JSON.stringify(payload), { qos: 1 }, function() {
console.log("Sent");
client.end();
process.exit();
});
});
以下是我的订阅者代码。
var client = mqtt.connect(url, { clientId: 'test-', clean:true});
client.on('connect', function () {
client.subscribe('presence', { qos: 1 });
});
client.on('message', function (topic, message) {
console.log('received message ', message.toString());
});
当我没有在发布商代码中声明任何带有connect函数的选项时,这是有效的。所以我不知道的是,发布者是不应该创建一个队列然后发布到主题?
我做错了什么?
答案 0 :(得分:0)
在发布到主题之前,您无需创建队列。发布第一个MQTT消息时,将使用默认交换名称“amq.topic”和与主题名称相同的绑定密钥自动创建队列。
我怀疑您的订阅者没有收到自发布以来发布的消息,并在发布者发布消息后订阅该主题。首先尝试启动您的订阅者,然后启动您的发布者。