我正在学习MQTT并面临一些问题,从http://blog.airasoul.io/the-internet-of-things-with-rabbitmq-node-js-mqtt-and-amqp/了解了与RabbitMQ的MQTT .
所以,这里的问题是当我运行发布者代码时,添加了一个队列 mqtt-subscription-test-qos1 但是当我发送消息时,'t get added in that queue. Although I' ve已将amq.topic的绑定添加到具有密钥绑定'presence'的此队列中 .
这是我的发布商代码
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函数的任何选项时,这是有效的 . 所以我不知道的是,发布者是不应该创建队列然后发布到主题?
我究竟做错了什么?
1 回答
在发布到主题之前,您不需要创建队列 . 发布第一个MQTT消息时,将使用默认交换名称“amq.topic”自动创建队列,并使用与主题名称相同的绑定键 .
我怀疑您的订阅者没有收到自发布以来发布的消息,并在发布者发布消息后订阅该主题 . 首先尝试启动您的订阅者,然后启动您的发布者 .