使用MQTT和Node.js无休止地发布消息

时间:2017-06-21 09:49:14

标签: node.js mqtt mosquitto

我在我的一台机器上运行了一个mosquitto代理(例如:mqtt://10.0.0.50:1883)。 我正在尝试在物联网网关中使用MQTT与节点接收来自移动应用程序的消息,并基于发送消息的主题执行某些功能。一旦操作完成,就从移动应用程序的网关发布关于同一主题的另一条消息。

网关方面:

 client.on('connect', function () {
    if (client.connected) {      
        client.subscribe(topics, {qos: 1}, function (err, granted) {        
            console.log('Subscribed to topics: ' + JSON.stringify(granted));        
        });
    } 
 });

client.on('message', function (topic, message) {
    switch (topic.toUpperCase()) {
        case 'TEST':
            console.log('test topic Called');
            client.publish(topic, "test topic response msg", {qos: 1}, 
            function () {
                console.log("message response sent");
            });
    }
});

我用另一个示例node.js代码尝试了这段代码。

客户端:

client.on('connect', function () {
    if (client.connected) {      
        client.subscribe("test", {qos: 1}, function (err, granted) {            
            console.log('Subscribed to topics: ' + JSON.stringify(granted));            
        });
        client.publish("test", "send_me_test", {qos: 1}, function () {
            console.log("request message published");
        });
    } 
});

client.on('message', function (topic, message) {
    console.log("Topic: " + topic + " request: " + message);
});

运行client.js后得到的响应:

Connected to the broker at: mqtt://10.0.0.50:1883
Subscribed to topics: [{"topic":"test","qos":1}]
message published
Topic: test request: send_me_test
Topic: test request: test topics response msg
Topic: test request: test topics response msg
Topic: test request: test topics response msg

无休止地继续。

在网关方面:

Jun 21 08:53:56 intel-quark api-server[16975]: test topic Called
Jun 21 08:53:56 intel-quark api-server[16975]: publishing response for topic: test with data: "test topics response msg"
Jun 21 08:53:56 intel-quark api-server[16975]: message published

不断重复。

我无法弄清楚为什么会发生同样的事情。我想要的输出是一个请求发布的响应发布。

1 个答案:

答案 0 :(得分:1)

您的网关正在订阅与发布时相同的主题,因为它将收到它自己的消息,这些消息将永远循环播放。

响应收到消息的同一主题通常不是一个好主意,除非消息正文中有内​​容将其标记为可以检查的响应以防止这样的循环。