【发布时间】:2021-11-26 14:48:26
【问题描述】:
我正在尝试使用 MQTT.js 创建一个持久会话,并且正如标题所述,除了一件事之外,一切似乎都运行良好。 我也在使用 QoS 2,所以客户端应该收到 1 条没有重复的消息
代码如下:
broker.js 应该没关系
publisher.js
const mqtt = require("mqtt");
const getWeather = require("./api-clients/openWeatherMap/openWeatherMapClient");
const client = mqtt.connect("mqtt://localhost", {
port: 1883,
clean: false,
clientId: "mqttjs_" + Math.random().toString(16).substr(2, 8),
});
client.on("connect", () => {
console.log("connected");
let i = 0;
setInterval(() => {
var weatherPromise = Promise.resolve(getWeather("Milan"));
weatherPromise.then((data) => {
var object = JSON.parse(data).coord;
client.publish("Weather", i + " " + JSON.stringify(object), {
qos: 2,
});
i++;
});
}, 5000);
});
subscriber.js
const mqtt = require("mqtt");
const client = mqtt.connect("mqtt://localhost", {
port: 1883,
clean: false,
clientId: "mqttjs_1",
});
client.on("connect", () => {
client.subscribe("Weather", { qos: 2 });
});
client.on("message", (message) => {
context = message.toString();
console.log(context);
});
这是客户端订阅者收到的内容:
-
0 {"lon":12.2214,"lat":46.145}
-
1 {"lon":12.2214,"lat":46.145}
subscriber.js 断开连接一段时间,然后重新连接并按预期接收:
- 2 {"lon":12.2214,"lat":46.145}
- 3 {"lon":12.2214,"lat":46.145}
- 4 {"lon":12.2214,"lat":46.145}
- 5 {"lon":12.2214,"lat":46.145}
然后,在它断开并重新连接后,它会收到:
- 3 {"lon":12.2214,"lat":46.145}
- 6 {"lon":12.2214,"lat":46.145}
- 7 {"lon":12.2214,"lat":46.145}
我真的不知道为什么它再次收到消息 3。 如果我断开连接并重新连接,它会继续这样做。
【问题讨论】:
-
编辑:重复消息是订阅者断开连接时发送的最后一条消息
-
编辑 2:添加 QoS:1 修复了问题