【问题标题】:Duplicate messages while subscribe using MQTT JS使用 MQTT JS 订阅时重复消息
【发布时间】:2019-08-16 08:23:07
【问题描述】:

我目前正在尝试 thingspeak,他们提供开发人员使用 MQTT 协议订阅数据。

但是当我尝试实现时,即使我不发布任何消息,数据也不会停止订阅。

channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2
channels/channel/subscribe/fields/field1/key: 2

我的 javascript 代码是:

let client = mqtt.connect('mqtt://mqtt.thingspeak.com', {
    username: process.env.MQTT_USERNAME,
    password: process.env.MQTT_PASSWORD,
    clientId: 'TSC-' + Math.random().toString(16).substr(2, 8) + '-' + Math.random().toString(16).substr(2, 8),
    protocolId: 'MQTT',
    keepalive: 1,
    reconnectPeriod: 100 * 1
  })
client.subscribe('channels/channel/subscribe/fields/field1/key', { qos: 0 })
client.on('message', (topic, payload) => {
  console.log(`${topic}: ${payload}`)
})

我错过了什么吗?还是楼主的错?谢谢。

【问题讨论】:

  • 在任何人都可以提供帮助之前,我们需要更多地了解整个系统。订阅代码看起来不错,但它将取决于代理和发布客户端将接收多少消息。

标签: javascript node.js mqtt


【解决方案1】:

看起来您可能会重新连接多次并在每次连接发生时订阅。当您第一次订阅时,ThingSpeak 代理会返回最后一个值。

【讨论】:

  • 我不这么认为,因为当我使用 RabbitMQ 时,它可以完美运行。
  • 你能修改你的代码来让clientid也一样吗?这样,如果你连接多次,你会看到我的日志。
  • 另外,您是否看到与另一个客户端重复消息的相同行为——比如 mqtt.fx?
  • 不,使用 mqtt.fx 或 mqtt 框不会显示相同的行为。
  • 那么很可能你的代码有一些无法解释的连接和订阅主题的模式。尝试写信给 ThingSpeak 开发人员,询问他们是否可以为您提供更多信息来调试您的应用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多