0-MQTT基础使用教程【学习】

news2024/11/29 2:30:44

文件路径

  • MQTT基础使用教程
    • 1. MQTT
      • 1.1 MQTT简介
        • 1.1.1 什么是MQTT
        • 1.1.2 设计原则
        • 1.1.3 应用领域
      • 1.2 MQTT协议相关概念
        • 1.2.1 MQTT协议实现方式
        • 1.2.2 MQTT协议中的方法
      • 1.3 消息服务质量QoS
        • 1.3.1 消息服务质量QoS三个等级
        • 1.3.2 发布与订阅QoS
      • 1.4 Topic通配符匹配规则
    • 2. EMQX
      • 2.1 EMQ X简介
      • 2.2 环境搭建与配置
        • 2.2.1 安装
        • 2.2.2 目录结构
      • 2.3 Dashboard
        • 2.3.1 功能简介
        • 2.3.2 Websocket发布订阅测试
      • 2.4 客户端调试工具MQTTX
    • 3.延迟发布
      • 3.1 简介
      • 3.2 演示
    • 4.共享订阅
      • 4.1 不带群组的共享订阅
      • 4.2 带群组的共享订阅
    • 5.代理订阅
      • 5.1 代理订阅应用场景
      • 5.2 代理订阅配置
    • 6. 保留消息
      • 6.1 保留消息应用场景
      • 6.2 保留消息配置
    • 7.认证
      • 7.1 认证简介
        • 7.1.1 认证方式
        • 7.1.2 认证结果与匿名认证
      • 7.2 HTTP认证
        • 7.2.1 认证请求配置
        • 7.2.2 认证服务开发
    • 8.ACL
      • 8.1 ACL简介
        • 8.1.1 ACL 插件
        • 8.1.2 授权结果与全局配置
        • 8.1.3 ACL 鉴权链
        • 8.1.4 超级用户
      • 8.2 HTTP ACL
        • 8.2.1 ACL配置
        • 8.2.2 HTTP ACL接口开发

MQTT基础使用教程

1. MQTT

1.1 MQTT简介

1.1.1 什么是MQTT

​ MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
在这里插入图片描述

一个使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接。客户端可以:

  • (1)发布其他客户端可能会订阅的信息;
  • (2)订阅其它客户端发布的消息;
  • (3)退订或删除应用程序的消息;
  • (4)断开与服务器连接。

MQTT服务器以称为"消息代理"(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,它可以:

  • (1)接受来自客户的网络连接;
  • (2)接受客户发布的应用信息;
  • (3)处理来自客户端的订阅和退订请求;
  • (4)向订阅的客户转发应用程序消息。
1.1.2 设计原则

由于物联网的环境是非常特别的,所以MQTT遵循以下设计原则:

  • (1)精简,不添加可有可无的功能;

  • (2)发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递,解耦Client/Server模式,带来的好处在于不必预先知道对方的存在(ip/port),不必同时运行;

  • (3)允许用户动态创建主题(不需要预先创建主题),零运维成本;

  • (4)把传输量降到最低以提高传输效率;

  • (5)把低带宽、高延迟、不稳定的网络等因素考虑在内;

  • (6)支持连续的会话保持和控制(心跳);

  • (7)理解客户端计算能力可能很低;

  • (8)提供服务质量( quality of service level:QoS)管理

  • (9)不强求传输数据的类型与格式,保持灵活性(指的是应用层业务数据)。

1.1.3 应用领域

MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域。

  • 物联网M2M通信,物联网大数据采集
  • Android消息推送,WEB消息推送
  • 移动即时消息,例如Facebook Messenger
  • 智能硬件、智能家居、智能电器
  • 车联网通信,电动车站桩采集
  • 智慧城市、远程医疗、远程教育
  • 电力、石油与能源等行业市场

1.2 MQTT协议相关概念

1.2.1 MQTT协议实现方式

实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publisher)、代理(Broker)(服务器)、订阅者(Subscriber)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:

  • (1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
  • (2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
1.2.2 MQTT协议中的方法

MQTT协议中定义了一些方法(也被称为动作),来于表示对确定资源所进行操作。这个资源可以代表预先存在的数据或动态生成数据,这取决于服务器的实现。通常来说,资源指服务器上的文件或输出。主要方法有:

  • (1)CONNECT:客户端连接到服务器
  • (2)CONNACK:连接确认
  • (3)PUBLISH:发布消息
  • (4)PUBACK:发布确认
  • (5)PUBREC:发布的消息已接收
  • (6)PUBREL:发布的消息已释放
  • (7)PUBCOMP:发布完成
  • (8)SUBSCRIBE:订阅请求
  • (9)SUBACK:订阅确认
  • (10)UNSUBSCRIBE:取消订阅
  • (11)UNSUBACK:取消订阅确认
  • (12)PINGREQ:客户端发送心跳
  • (13)PINGRESP:服务端心跳响应
  • (14)DISCONNECT:断开连接
  • (15)AUTH:认证

1.3 消息服务质量QoS

MQTT 协议中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性,QoS 的设计是 MQTT 协议里的重点。作为专为物联网场景设计的协议,MQTT 的运行场景不仅仅是 PC,而是更广泛的窄带宽网络和低功耗设备,如果能在协议层解决传输质量的问题,将为物联网应用的开发提供极大便利。

1.3.1 消息服务质量QoS三个等级

MQTT 设计了 3 个 QoS 等级。

  • QoS 0:消息最多传递一次,如果当时客户端不可用,则会丢失该消息。

  • QoS 1:消息传递至少 1 次。

  • QoS 2:消息仅传送一次。

    QoS0:“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。
    在这里插入图片描述

    QoS1:“至少一次”,确保消息到达,但消息重复可能会发生。
    在这里插入图片描述

    QoS2:“只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。
    在这里插入图片描述

1.3.2 发布与订阅QoS

MQTT 发布与订阅操作中的 QoS 代表了不同的含义,发布时的 QoS 表示消息发送到服务端时使用的 QoS,订阅时的 QoS 表示服务端向自己转发消息时可以使用的最大 QoS。

  • 当客户端 A 的发布 QoS 大于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 B 的订阅 QoS。
  • 当客户端 A 的发布 QoS 小于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 A 的发布 QoS。

不同情况下客户端收到的消息 QoS 可参考下表:

发布消息的 QoS 主题订阅的 QoS 接收消息的 QoS
0 0 0
0 1 0
0 2 0
1 0 0
1 1 1
1 2 1
2 0 0
2 1 1
2 2 2

1.4 Topic通配符匹配规则

层级分隔符:/

/ 用来分割主题树的每一层,并给主题空间提供分等级的结构。当两个通配符在一个主题中出现的时候,主题层次分隔符的使用是很重要的。

示例:
love/you/with/all/my/heart

多层通配符:#

多层通配符有可以表示大于等于0的层次。因此,love/#也可匹配到单独的love,此时#代表0层。

多层通配符一定要是主题树的最后一个字符。比如说,love/#是有效的,但是love/#/with是无效的。

love/you/#	可匹配如下内容(包括但不限于)

love/you
love/you/with
love/you/with/all
love/you/with/all/my/heart
love/you/with/all/my/hearts

单层通配符:+

只匹配主题的一层。

1. love/you/+  :匹配love/you/with和love/you/and,但是不匹配love/you/with/all/my/heart。
2. 单层通配符只匹配1层,love/+不匹配love。
3. 单层通配符可以被用于主题树的任意层级,连带多层通配符。它必须被用在主题层级分隔符/的右边,除非它是指定自己。因此,+和love/+都是有效的,但是love+无效。单层通配符可以用在主题树的末端,也可以用在中间。比如说,love/+和love/+/with都是有效。

注意事项

1.主题层次分隔符被用来在主题中引入层次。多层的通配符和单层通配符可以被使用,但他们不能被使用来做发布者的消息。
2.Topic命名尽量见名知意,符合规范,主题名字是大小写敏感的。比如说,love和LOVE是两个不同的主题。
3.以/开头会产生一个不同的主题。比如说,/love与love不同。/love匹配"+/+"和/+,但不匹配+
4.不要在任何主题中包含null(Unicode \x0000)字符。
5.在主题树中,长度被限制于64k内但是在这以内没有限制层级的数目 。
6.可以有任意数目的根节点;也就是说,可以有任意数目的主题树。

2. EMQX

2.1 EMQ X简介

EMQ X 是开源社区中最流行的 MQTT 消息服务器。

EMQ官网:https://www.emqx.cn/

EMQ X 公司主要提供三个版本:开源版、企业版、平台版 可在官网首页产品导航查看每一种产品;主要体现在支持的连接数量、产品功能和商业服务等方面的区别。

**为什么选择EMQ X ?**从支持 MQTT5.0、稳定性、扩展性、集群能力等方面考虑,EMQX 的表现应该是最好的。

EMQ X 是开源百万级分布式 MQTT 消息服务器(MQTT Messaging Broker),用于支持各种接入标准 MQTT 协议的设备,实现从设备端到服务器端的消息传递,以及从服务器端到设备端的设备控制消息转发。从而实现物联网设备的数据采集,和对设备的操作和控制。

与别的MQTT服务器相比EMQ X 主要有以下的特点:

  • 经过100+版本的迭代,EMQ X 目前为开源社区中最流行的 MQTT 消息中间件,在各种客户严格的生产环境上经受了严苛的考验;

  • EMQ X 支持丰富的物联网协议,包括 MQTT、MQTT-SN、CoAP、 LwM2M、LoRaWAN 和 WebSocket 等;

  • 优化的架构设计,支持超大规模的设备连接。企业版单机能支持百万的 MQTT 连接;集群能支持千万级别的 MQTT 连接;

  • 易于安装和使用;

  • 灵活的扩展性,支持企业的一些定制场景;

  • 中国本地的技术支持服务,通过微信、QQ等线上渠道快速响应客户需求;

  • 基于 Apache 2.0 协议许可,完全开源。EMQ X 的代码都放在 Github 中,用户可以查看所有源代码。

  • EMQ X 3.0 支持 MQTT 5.0 协议,是开源社区中第一个支持 5.0协议规范的消息服务器,并且完全兼容 MQTT V3.1 和 V3.1.1 协议。除了 MQTT 协议之外,EMQ X 还支持别的一些物联网协议

  • 单机支持百万连接,集群支持千万级连接;毫秒级消息转发。EMQ X 中应用了多种技术以实现上述功能,

    • 利用 Erlang/OTP 平台的软实时、高并发和容错(电信领域久经考验的语言)
    • 全异步架构
    • 连接、会话、路由、集群的分层设计
    • 消息平面和控制平面的分离等
  • 扩展模块和插件,EMQ X 提供了灵活的扩展机制,可以实现私有协议、认证鉴权、数据持久化、桥接转发和管理控制台等的扩展

  • 桥接:EMQ X 可以跟别的消息系统进行对接,比如 EMQ X Enterprise 版本中可以支持将消息转发到 Kafka、RabbitMQ 或者别的 EMQ 节点等

  • 共享订阅:共享订阅支持通过负载均衡的方式在多个订阅者之间来分发 MQTT 消息。比如针对物联网等数据采集场景,会有比较多的设备在发送数据,通过共享订阅的方式可以在订阅端设置多个订阅者来实现这几个订阅者之间的工作负载均衡

2.2 环境搭建与配置

2.2.1 安装

安装的方式有很多种,可供自由选择:

Shell脚本安装、包管理器安装、二进制包安装、ZIP压缩包安装、Homebrew安装、Docker运行安装、Helm安装、源码编译安装

Docker运行安装

在EMQ X Broker下载页面直接提供的有基于docker的安装命令

1:首先拉取emqx的镜像

[root@docker emqx]# docker pull emqx/emqx:v4.1.0

2:使用docker命令运行得到docker容器

[root@docker emqx]# docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083  emqx/emqx:v4.1.0

EMQ X broker提供了Dashboard 以方便用户管理设备与监控相关指标,启动后我们通过访问服务端18083端口

地址:http://192.168.200.128:18083

访问Dashboard 查看启动效果!

2.2.2 目录结构

不同安装方式得到的 EMQ X 其目录结构会有所不同,具体如下:

描述 使用 ZIP 压缩包安装(同docker) 使用二进制包安装
可执行文件目录 ./bin /usr/lib/emqx/bin
数据文件 ./data /var/lib/emqx/data
Erlang 虚拟机文件 ./erts-* /usr/lib/emqx/erts-*
配置文件目录 ./etc /etc/emqx
依赖项目录 ./lib

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

100183. 最大好子数组和

题目: 给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个子数组中,第一个元素和最后一个元素 差的绝对值恰好 为 k ,我们称这个子数组为 好 的。换句话说,如果子数组 nums[i..j] 满足 |nums[i] - nums[j]| k…

Python基于时间序列分析的大气污染预测的设计与实现,附源码

1 简介 Python基于时间序列分析的大气污染预测的设计与实现 摘要:随着当今社会工业的发展,世界各地的空气质量都下降的非常明显,大气的污染对人们的身体健康会产生极大的危害。所以从20世纪初我国就十分关注空气质量的治理问题,…

【Java】Redis入门

1. Redis入门 1.1 Redis简介 Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。 官网:https://redis.io 中文网:https://www.redis.net.cn/ key-value结构存储: 主要特点: 基于内…

【Android】使用Termux终端的SSH服务与电脑传输文件

在Android手机上有一个Termux APP,可运行类似 Linux 终端的模拟器,记得之前有讲过用电脑远程控制手机终端命令,那现在,怎样实现电脑与手机直接传输文件呢,且看这篇文章。 文章目录 Termux安装功能ssh服务从远程下载从本…

深度学习入门笔记(六)线性回归模型

本节,我们用线性回归为例子,回顾一些基本概念 6.1 相关性 相关性的取值范围是-1 到 1,越接近 1 或者-1 代表越相关,越接近 0 则越不相关。相关系数大于 0 称为正相关,小于 0 称为负相关。 假如 A 与 B 正相关&#…

[Linux 进程控制(二)] 写时拷贝 - 进程终止

文章目录 1、写时拷贝2、进程终止2.1 进程退出场景2.1.1 退出码2.1.2 错误码错误码 vs 退出码2.1.3 代码异常终止引入 2.2 进程常见退出方法2.2.1 exit函数2.2.2 _exit函数 本片我们主要来讲进程控制,讲之前我们先把写时拷贝理清,然后再开始讲进程控制。…

VMware无法检测到插入的USB设备,虚拟机插拔USB无反应

原本正常使用的VMware虚拟机,在进行了重装软件后,发现虚拟机插拔USB设备都无法检测到,没有任何的反应和提示。 通过一系列的操作发现,在新安装了VMware workstation 软件后,存在一定的概率性会发生VMware虚拟机无法自…

牛客网-------------------------长方体

解题思路: 设棱长为x,y,z;假设已知面积为a,b,c 那么,xya;yzb;xzc; 一式除二式得x/za/b x(a/b)*z 联立xzc 代入得(a/b)z^2c z^2c*b/a z根号下&…

pdf怎么转成高清图?pdf在线转换器推荐分享

在日常的工作或者学习中,有时候会需要将编辑好的pdf转高清图片,这样更方便我们后续使用,那么怎么将pdf转图片(https://www.yasuotu.com/pdftopic)还能保持清晰呢?下面介绍一款pdf转换工具,支持p…

某头部股份制银行基于 Data Fabric 的敏捷数据准备创新实践

【背景】 随着数字化转型的持续深入,某头部股份制银行把“依托数据洞察提升管理和营销的精准度、实现经营与服务的精细化与个性化”作为参与下一阶段数字化业务竞争的核动力。经过多年的探索,该头部股份制银行数字化技术与业务场景的融合逐渐进入了深水…

中科大计网学习记录笔记(三):接入网和物理媒体

前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…

《学成在线》微服务实战项目实操笔记系列(P1~P49)【上】

《学成在线》项目实操笔记系列【上】,跟视频的每一P对应,全系列12万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。同时也欢迎大家提问与讨论,我会尽力帮大家解…

高通android设备themal读取cpu温度

以msm8953的themal分布信息,主要是下图的位置: 这其中 cpu相关的themal的位置有: 读取thermal 温度数据可以通过以下几个步骤: 获取sensor_info rootmsm8953_64:/ # cat /sys/module/msm_thermal/sensor_info tsens:tsens_tz_se…

数据结构 - 线段树

1. 预制值: 构建的数组为,nums:【2, 5, 1, 4, 3】区间和问题,假设求区间 [1,3] 的和 2. 建树 2.1 构建线段树数组 int[] segT new int[4*n](为什么数组大…

Vivado Tri-MAC IP的例化配置(三速以太网IP)

目录 1 Tri-MAC IP使用RGMII接口的例化配置1.1 Data Rate1.2 interface配置1.3 Shared Logic配置1.4 Features 2 配置完成IP例化视图 1 Tri-MAC IP使用RGMII接口的例化配置 在网络设计中,使用的IP核一般为三速以太网IP核,使用时在大多数场景下为配置为三…

【计算机图形学】实验一 DDA算法、Bresenham算法

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

【Git】05 分离头指针

文章目录 一、分离头指针二、创建分支三、比较commit内容四、总结 一、分离头指针 正常情况下,在通过git checkout命令切换分支时,在命令后面跟着的是分支名(例如master、temp等)或分支名对应commit的哈希值。 非正常情况下&…

python_蓝桥杯刷题记录_笔记_全AC代码_入门3

前言 记录我的解法以及笔记思路,谢谢观看。 题单目录 1.P2141 [NOIP2014 普及组] 珠心算测验 2.P1567 统计天数 3.P1055 [NOIP2008 普及组] ISBN 号码 4.P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here 5.P1308 [NOIP2011 普及组] 统计单词数 6.P1047 […

Kubernetes的有状态应用示例:用PV部署WordPress和MySQL

文章目录 环境PVC和PV创建PVC和PV 创建kustomization.yaml添加secret生成器 为MySQL和WordPress添加资源配置部署和验证清理参考 环境 RHEL 9.3Docker Community 24.0.7minikube v1.32.0 PVC和PV PersistentVolume(PV)是在集群里由管理员手动provisio…

Python爬虫urllib详解

前言 学习爬虫,最初的操作便是模拟浏览器向服务器发出请求,那么我们需要从哪个地方做起呢?请求需要我们自己来构造吗?需要关心请求这个数据结构的实现吗?需要了解 HTTP、TCP、IP 层的网络传输通信吗?需要知…