Mqtt Retained+Lwt Message 实现client状态监控

编程入门 行业动态 更新时间:2024-10-11 23:16:44

Mqtt Retained+Lwt Message 实现client<a href=https://www.elefans.com/category/jswz/34/1771386.html style=状态监控"/>

Mqtt Retained+Lwt Message 实现client状态监控

保留消息:

遗嘱消息:

一言以敝之

被订阅的client-B,存在一个状态 topic,该topic 为 will topic

Retained Message:存储 will topic 最后的一条消息的状态内容,当有订阅的新client-A上线后可以获取最新状态取值

Will Message:被订阅的client-B断开连接后,对will topic发送一条消息,取值为预设的offline,标示下线

client-B每次链接成功后,对will topic 发送一条 online 的消息,标示Client-B已上线

流程:

  1. 客户端 A 遗嘱消息设定为”offline“,该遗嘱主题与一个普通发送状态的主题设定成同一个 A/status
  2. 当客户端 A 连接时,向主题 A/status 发送 “online” 的 Retained 消息,其它客户端订阅主题 A/status的时候,获取 Retained 消息为 “online” ;
  3. 当客户端 A 异常断开时,系统自动向主题 A/status 发送”offline“的消息,其它订阅了此主题的客户端会马上收到”offline“消息;如果遗嘱消息被设定了 Retained 的话,这时有新的订阅A/status主题的客户端上线的时候,获取到的消息为“offline”。

实现 Client 连接状态监控的原理很简单:

  1. Client 在连接的时候指定 Will Topic 为“client/status”,遗愿消息为“offline”,Will Retain=1;
  2. Client 在连接成功以后向同一个主题“client/status”,发布一个内容为“online”的 Retained 消息。

那么订阅者在任何时候订阅“client/status”,都会获取 Client 当前的连接状态。

client.js 代码如下:
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://iot.eclipse', {clientId: "mqtt_sample_publisher_chapter_8",clean: false,will:{topic : 'client/status',qos: 1,retain: true,payload: JSON.stringify({status: 'offline'})}
})client.on('connect', function (connack) {if(connack.returnCode == 0){client.publish("client/status", JSON.stringify({status: 'online'}), {qos: 1, retain: 1})}else{console.log(`Connection failed: ${connack.returnCode}`)}
})monitor.js 代码如下:
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://iot.eclipse', {clientId: "mqtt_sample_subscriber_id_chapter_8_2",clean: false
})client.on('connect', function () {client.subscribe("client/status", {qos: 1})
})client.on("message", function (_, message) {var jsonPayload = JSON.parse(message.toString())console.log(`client is ${jsonPayload.status}`)
})

在 monitor.js 中,我们每次连接的时候都重新订阅“client/status”,这样的话每次运行都能收到关于 Client 连接状态的 Retained 消息。

首先运行 node client.js,然后运行 node monitor.js,会得到以下输出:

client is online

在运行 client.js 的终端上,使用 Ctrl+C 终止 client.js,之后在运行 monitor.js 的终端上会得到以下输出:

client is offline

然后重新运行 node client.js,在运行 monitor.js 的终端上会得到以下输出:

client is online

Ctrl+C 终止 monitor.js,然后重新运行 node monitor.js,会得到以下输出:

client is online

这样我们就完美地监控了 Client 的连接状态。

更多推荐

Mqtt Retained+Lwt Message 实现client状态监控

本文发布于:2024-03-06 05:25:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714480.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:状态   Retained   Mqtt   Lwt   client

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!