当前位置: 首页 > news >正文

【MQTT】常见问题

MQTT常见问题

总结在物联网开发过程中,使用MQTT需要注意的一些问题。

ClientID属性

每个MQTT客户端连接MQTT的服务端的时候,一定要设置一个容易辨别的clientid属性,用来唯一标识客户端,不建议使用默认生成的随机clientid,没有任何语义信息。

保留消息

当mqtt的客户端不在线时,可以通过发送保留消息,使得客户端上线后能收到该保留消息。如果发送的是普通消息,且会话已失效,则消息会丢失。但是保留消息有一个问题,同一个Topic下,最多只保留一个消息,新的保留消息会替换旧的保留消息。

clear_session设置

MQTT的客户端将clear_session=true时,客户端在连接上MQTT服务端时,MQTT服务端会清除之前与客户端的会话信息。反之,如果设置成false,则不清理会话,那么即使MQTT客户端掉电下线了,在会话没有过期的这段时间内,MQTT服务端也会保留收到的消息,当客户端重新上线时能收到离线期间丢失的消息。大家需要根据业务需要,合理的设置clear_session值。

注意:如果设置clear_session=false,不清理会话,一定要将MQTT的clientid设置成一个唯一不变的值,因为MQTT服务端通过clientid来识别是哪个客户端的会话。

如何确定客户端上线和下线

2种方法:
1、EMQX中,可以通过监听系统主题接受某个客户端的上线和下线消息。
2、自定义设备上线和下线消息,如果设备突然掉线,可以通过遗嘱消息来确定下线。

服务器集群时如何订阅主题

使用EMQX作为MQTT服务端时,如果服务器是多副本部署,那么为了保证设备的一个mqtt消息只会被一个服务器消费,则服务器订阅主题的时候一定要使用共享订阅,通过在订阅的主题前面增加前缀来实现。

前缀格式示例前缀真实主题名
带群组格式$share/abc/t/1$share/abc/t/1
不带群组格式$queue/t/1$queue/t/1

带群租的 $share/abc/t/1,其中abc表示组名,订阅者属于abc组,abc组内只会有一个订阅者收到消息。不带群组,就相当于订阅者在一个默认组内,该组内只会存在一个订阅者收到消息。

相关文章:

  • 为什么网站很少做全屏农产品营销策划方案
  • 网站建设 blog网站建设技术解决方案
  • 青岛网站维护公司周口seo推广
  • 网站设计与网页设计的区别百度权重5的网站能卖多少钱
  • 如何修改网站备案的域名百度流量
  • 长沙网站优化方式百度seo培训班
  • MySQL之视图深度解析
  • 第2章,[标签 Win32] :编写兼容多字节字符集和 Unicode 字符集的 Windows 程序
  • 【DevTools浏览器开发者工具反调试之无限Debugger跳过】
  • SpringBoot高校党务系统
  • PyTorch RNN实战:快速上手教程
  • Python 数据分析与可视化 Day 7 - 可视化整合报告实战
  • Python核心可视化库:Matplotlib与Seaborn深度解析
  • request这个包中,get 这个方法里传入的是params ,post这个方法里传入的是data 和 json。这个区别是什么?
  • pscc系统如何部署,怎么更安全更便捷?
  • Linux 怎么恢复sshd.service
  • 结构体数组与Excel表格:数据库世界的理性与感性
  • 超级好用的小软件:geek,卸载软件,2m大小
  • Webpack 核心概念
  • 基于MATLAB的BP神经网络的心电图分类方法应用
  • Web后端基础:Java操作数据库----JDBC
  • 夏至之日,共赴实时 AI 之约:RTE Open Day@AGI Playground 2025 回顾
  • CAS 有什么问题?如何解决这些问题?
  • 《解锁Web游戏潜力:手柄操控的进阶法则》
  • 【nRF52832】【环境搭建 1】【ubuntu下搭建nRF52832开发环境】
  • 2 Studying《BPF.Performance.Tools》1-9