发布后未收到消息。 RABBITMQ MQTT

时间:2017-03-24 09:19:47

标签: node.js rabbitmq mqtt

我正在学习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函数的选项时,这是有效的。所以我不知道的是,发布者是不应该创建一个队列然后发布到主题?

我做错了什么?

1 个答案:

答案 0 :(得分:0)

在发布到主题之前,您无需创建队列。发布第一个MQTT消息时,将使用默认交换名称“amq.topic”和与主题名称相同的绑定密钥自动创建队列。

我怀疑您的订阅者没有收到自发布以来发布的消息,并在发布者发布消息后订阅该主题。首先尝试启动您的订阅者,然后启动您的发布者。