【问题标题】:MQTT.js subscriber receives duplicates message after disconnect-reconnectMQTT.js 订阅者在断开重新连接后收到重复消息
【发布时间】: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 修复了问题

标签: node.js mqtt


【解决方案1】:

我测试了这个问题,没有收到重复的消息,但是在之前的 MQTT.js 版本中似乎有问题,但我发现它已经修复了。也许你可以先用 MQTT 客户端进行预测试,不确定它是否是你的 MQTT Broker,推荐使用 MQTT X:http://mqttx.app/ 来验证你的 MQTT Broker。如果是同样的问题,可能不是你写的客户端的代码问题。

以防万一您想查看 MQTT.js 教程:https://www.emqx.com/en/blog/mqtt-js-tutorial

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    相关资源
    最近更新 更多