我在我的一台机器上运行了一个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
不断重复。
我无法弄清楚为什么会发生同样的事情。我想要的输出是一个请求发布的响应发布。
答案 0 :(得分:1)
您的网关正在订阅与发布时相同的主题,因为它将收到它自己的消息,这些消息将永远循环播放。
响应收到消息的同一主题通常不是一个好主意,除非消息正文中有内容将其标记为可以检查的响应以防止这样的循环。