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

mqtt学习笔记(一)

以解决问题方式逐步学习探索

  • mqtt使用场景
  • mqtt可能缺点
  • mqtt学习疑问探索
    • 1、mqtt主题发布过的历史消息,全新连接的client能消费到吗?
    • 2、mqtt的client掉线如何重连,重连后订阅的topic配置还在不?
    • 3、mqtt的client掉线重连后,如何保证掉线期间的消息能被消费到?
    • 4、mqtt客户端订阅的消息能保证按序消费吗?
    • 5、mqtt客户端能订阅自己发布的主题消息吗?
    • 6、mqtt设置QoS=2还有必要在业务端判重吗?
    • 7、mqtt协议服务端支持的最大连接数?
    • 8、mqtt服务器控制台?
    • 9、mqtt中的普通消息、保留消息、遗嘱消息区别?
    • 10、消息默认是否过期,能否设置过期时间?
    • 11、支持延迟发布?
    • 12、用户属性?
    • 13、共享订阅?
    • 14、排它订阅?
    • 15、自动订阅?
    • 16、主题通配符?

mqtt使用场景

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,特别适用于资源受限的设备(内存小)和网络环境较差(低带宽、降低网络流量成本)的场景。适用于物联网(IoT)设备之间的通信,常用于发布/订阅模式的消息传输。

mqtt可能缺点

不适合大数据量传输、缺乏复杂的事务处理、消息顺序不保证、依赖中间代理

mqtt学习疑问探索

1、mqtt主题发布过的历史消息,全新连接的client能消费到吗?

针对普通消息不能,只能消费新发布的普通消息;
保留消息(retained messages)例外,有些设备上线要知道最新的设备状态等

2、mqtt的client掉线如何重连,重连后订阅的topic配置还在不?

可以配置成自动连接或手动连接。
连接后,订阅的topic配置不存在了,确实需要重新订阅之前的主题

3、mqtt的client掉线重连后,如何保证掉线期间的消息能被消费到?

可以设置会话不被清空,会话清空的话,就消费不到掉线期间产生的消息了。
参考方法setCleanSession(true or false)

4、mqtt客户端订阅的消息能保证按序消费吗?

得考虑是否支持QoS2配置、能否按序生产、能否按序消费

5、mqtt客户端能订阅自己发布的主题消息吗?

可以

6、mqtt设置QoS=2还有必要在业务端判重吗?

保守、严谨来说,业务侧还是很有必要进行判重。
主要是因为消息消费后,在最后的确认机制未成功反馈结果时(极端情况下手动确认时,网络异常、系统故障等),消息还是可能被重复进行消费

7、mqtt协议服务端支持的最大连接数?

具体看选择的mqtt协议中间件类型、服务器配置、压测等情况…

8、mqtt服务器控制台?

看具体使用的mqtt协议中间件

9、mqtt中的普通消息、保留消息、遗嘱消息区别?

保留消息可以在新客户端订阅时,推送;
遗嘱消息是客户端连接时指定的消息,可以在broker监测离线时,推送告知给其他订阅的客户端

10、消息默认是否过期,能否设置过期时间?

发布后broker存储,默认不过期,普通消费消费后自动删;
可以设置过期时间,过期不消费会被清掉,不会再推送消费

11、支持延迟发布?

支持,即可提前发布消息在broker服务端留存,达到一定的延迟时间,再推送到订阅的客户端去消费

12、用户属性?

可以在发送消息时,指定用户属性(有点类似于设置http接口的请求头参数)

13、共享订阅?

mqtt5.0支持,即共享订阅后,同一主题的多个客户端可以负载均衡处理消息。
在普通的订阅中,我们每发布一条消息,所有匹配的订阅端都会收到该消息。当某个订阅端的消费速度无法跟上消息的生产速度时,我们没有办法将其中一部分消息分流到其他订阅端中来分担压力。这使订阅端容易成为整个消息系统的性能瓶颈。

14、排它订阅?

一个主题当前仅能存在一个订阅者,在当前订阅者未取消订阅前,其他订阅者都将无法订阅该主题。

15、自动订阅?

自动订阅能够给 EMQX 设置多个规则,在设备成功连接后按照规则为其订阅指定主题,不需要额外发起订阅。

16、主题通配符?

支持通配符规则设置,主要用于客户端一次订阅多个主题

http://www.lryc.cn/news/484151.html

相关文章:

  • Kafka Eagle 安装教程
  • Ajax 获取进度和中断请求
  • 实验5:网络设备发现、管理和维护
  • kafka 生产经验——数据积压(消费者如何提高吞吐量)
  • 对等同步身份认证(Simultaneous Authentication of Equals,简称SAE)介绍
  • Ajax 与 Vue 框架应用点——随笔谈
  • The Internals of PostgreSQL 翻译版 持续更新...
  • redis 原理篇 31 redis内存回收 内存淘汰策略
  • 微信小程序——实现二维码扫描功能(含代码)
  • 【go从零单排】HTTP客户端和服务端
  • Android 配置默认输入法
  • 交易术语汇总(Technical Trading Dictionary)
  • 【Docker】Docker基础及docker-compose
  • 从零开始的 Hugging Face 项目:我的首个在线 SQL 查询工具之旅20241111
  • 让AI为你发声!Windows电脑快速部署ChatTTS文本转语音神器
  • 【AI换脸整合包及教程】FaceFusion 3.0.0:AI换脸技术的革新之旅
  • 更新对象或数组的值的方法
  • Java线程池浅谈(创建线程池及线程池任务处理)
  • Dockerfile的使用
  • 自動換IP為什麼會不穩定?
  • 【0x0043】HCI_Write_Inquiry_Scan_Type详解
  • 飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问
  • ctfshow-web入门-SSTI(web361-web368)上
  • pyinstaller+upx给python GUI程序添加自定义图标
  • LeetCode【0034】在排序数组中查找元素的第一个和最后一个位置
  • react-markdown内容宽度溢出和换行不生效问题
  • uniapp 上传 base64 图片
  • 让Git走代理
  • 通义千问API调用测试 (colab-python,vue)
  • H3C ER8300G2-X未授权导致信息泄露漏洞(CVE-2024-32238)