2017-03-24 45 views
0

我正在學習MQTT,並面臨一些與使用RabbitMQ從http://blog.airasoul.io/the-internet-of-things-with-rabbitmq-node-js-mqtt-and-amqp/瞭解MQTT有關的問題。發佈後沒有收到消息。 RABBITMQ MQTT

所以,這裏的問題是當我運行發佈者代碼時,隊列被添加mqtt-subscription-test-qos1但是當我的消息沒有被添加到該隊列中時。儘管我已將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()); 
}); 

這樣做,當我沒有在發佈者代碼中聲明連接函數的任何選項。所以我不明白的是,發佈者是不是應該創建一個隊列然後發佈到主題?

我在做什麼錯?

+0

如果您從發佈回調中刪除'client.end'和'process.exit'調用,它工作嗎? – hardillb

回答

0

在發佈到主題之前,您不需要創建隊列。當您發佈第一個MQTT消息時,會使用默認交換名稱「amq.topic」和綁定鍵作爲主題名稱自動創建隊列。

我懷疑你的訂閱者沒有收到自發布以來發布的消息,並訂閱了發佈者發佈消息之後的主題。嘗試先啓動訂閱者,然後啓動發佈者。

相關問題