EMQ的使用和介绍

news2024/12/26 20:57:18

首先先了解一下底层的协议:

1. MQTT

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

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

(1)精简,不添加可有可无的功能;
(2)发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递,解耦Client/Server模式,带来的 好处在于不必预先知道对方的存在(ip/port),不必同时运行;
(3)允许用户动态创建主题(不需要预先创建主题),零运维成本;
(4)把传输量降到最低以提高传输效率;
(5)把低带宽、高延迟、不稳定的网络等因素考虑在内;
(6)支持连续的会话保持和控制(心跳);
(7)理解客户端计算能力可能很低;
(8)提供服务质量( quality of service level:QoS)管理
(9)不强求传输数据的类型与格式,保持灵活性(指的是应用层业务数据)

2. MQTT协议实现方式:

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

**(1)Topic,**可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容 (payload);

**(2)payload,**可以理解为消息的内容,是指订阅者具体要使用的内容。

3. Qos: 消息服务质量(Quality of Service)

MQTT 设计了 3 个 QoS 等级。

理解: Qos: 规定自己想要发出,或者接收到的消息的规则

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

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

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

“至少一次”,确保消息到达,但消息重复可能会发生

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

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

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

基本都是用QoS2

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

  • 当客户端 A 的发布 QoS 大于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 B 的订阅 QoS。
  • 当客户端 A 的发布 QoS 小于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 A 的发布 QoS。
总结: 也就是说QoS这个东西的设置是对消息的接收来做保证的,即如果是
QoS 1 我只负责发一次,收得到收不到我不管. 当网络状态不稳定的时候就会出现丢失现象
QoS 2 是能够保证至少收到一次,但是存在重复消费的问题. 
QoS 3 保证只有一条信息到达  

* 如果发布和订阅的客户端服务质量等级不相同时,谁的低按谁的为准
4. Topic通配符匹配规则
  1. 层级分隔符 /

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

示例:
love/you/with/all/my/heart
  1. 多层通配符 #

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

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

  1. 单层通配符 +

只匹配主题的一层

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.可以有任意数目的根节点;也就是说,可以有任意数目的主题树。

1.EMQ X

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

Windows安装emqx_windows emqx安装_罗小爬EX的博客-CSDN博客

优点:

单机能支持百万的 MQTT 连接;集群能支持千 万级别的 MQTT 连接;

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

2. Dashboard(可视化界面)

EMQ X 提供了 Dashboard 以方便用户管理设备与监控相关指标。通过 Dashboard可以查看服务器基本 信息、负载情况和统计数据,可以查看某个客户端的连接状态等信息甚至断开其连接,也可以动态加载 和卸载指定插件。除此之外,EMQ X Dashboard 还提供了规则引擎的可视化操作界面,同时集成了一 个简易的 MQTT 客户端工具供用户测试使用。

3. MQTTX

模拟客户端

MQTTX:跨平台 MQTT 5.0 桌面客户端工具

MQTT X 是 EMQ 开源的一款优雅的跨平台 MQTT 5.0 桌面客户端,它支持 macOS, Linux, Windows。 MQTT X 的 UI 采用了聊天界面形式,简化了页面操作逻辑,用户可以快速创建连接,允许保存多个客 户端,方便用户快速测试 MQTT/MQTTS 连接,及 MQTT 消息的订阅和发布。

发送消息

这里一定要记住是在哪方加前缀

1. 消息延迟发布

此功能由 emqx_mod_delayed 模块提供,需要开启模块后才能使用此功能。

$delayed/{DelayInteval}/{TopicName} 单位: S

当客户端使 用特殊主题前缀 $delayed/{DelayInteval} 发布消息到 EMQ X 时,将触发延迟发布功能

示例:

$delayed/15/x/y : 15 秒后将 MQTT 消息发布到主题 x/y 。

$delayed/60/a/b : 1 分钟后将 MQTT 消息发布到 a/b

示例: 在MQTT X上演示

现在在MQTTX上模拟四个客户端: 洗衣机,空调,电视机,手机

现在让洗衣机,空调,电视机订阅phoneMessage这个主题, 消息服务质量设置为2,以后都设置为2

各个实例订阅的主题和发送的主题如下:

洗衣机客户端订阅主题: phoneMessage
空调客户端订阅主题:   phoneMessage
电视机客户端订阅主题: phoneMessage

手机发送的主题: $delayed/2/phoneMessage       // 2 秒后发送到订阅phoneMessage的客户端
在这里插入图片描述

在手机客户端上发送消息: 注意此时特殊主题的前缀在发布者上

在这里插入图片描述

两秒后,其他订阅这个主题的客户端都收到了消息.

在这里插入图片描述

2. 共享订阅

注意注意注意: 🚩

共享订阅的主题格式是针对订阅端来指定的,例如: $share/group1/cookie ;而消息的发布方是向主 题: cookie 发布消息。这样在订阅方才能达到负载均衡的效果。

共享订阅是在多个订阅者之间实现负载均衡的订阅方式:

EMQ X 支持两种格式的共享订阅前缀:

示例前缀真实主题名
方式一(不带群组的共享订阅)$queue/name/cookie$queue/name/cookie
方式二(带群组的共享订阅)$share/group1/cookie$share/group1/cookie

应用场景:

1. 对于方式一不带群组的共享订阅:

在我们取钱完成时,我们要求需要向当前用户的手机发送一条短信, 为了提高服务的容错性,我们准备了多台发短信的服务, 但是我们要求只发送一条短信,此时我们就可以使用 方式一, 使只有一台机器收到发送短信的消息如下, 只会有一台机器收到

在这里插入图片描述

各个实例订阅的主题和发送的主题如下:

消息服务实例1订阅的主题:  $queue/cookie
消息服务实例2订阅的主题:  $queue/cookie
消息服务实例3订阅的主题:  $queue/cookie

发布者发布的主题:               cookie
2. 对于方式二带群组的共享订阅:

$share/group1/cookie

带分组的使用的特殊前缀是: $share/{group}/{TopicName}

使用场景如下:

在方式一的上面做一点点更改, 就是在发布者消息发送成功后, 不仅仅需要有一台消息服务实例去发送消息, 也需要有一台邮件服务实例去发送邮件. 所以这里就可以进行分组

message 组 : 消息服务实例1 消息服务实例2 消息服务实例2

email组: 邮件服务实例1 邮件服务实例2

在这里插入图片描述

各个实例订阅的主题和发送的主题如下:

(message组)
    消息服务实例1   $share/message/cookie
    消息服务实例2   $share/message/cookie
    消息服务实例2   $share/message/cookie

(email组)
    邮件服务实例1   $share/email/cookie
    邮件服务实例2   $share/email/cookie

    发布者实例       cookie

此时就可以保证两个组中都会有一个实例服务收到消息.

3. 负载均衡策略修改默认 随机

在EMQ X 服务的 etc/emqx.conf中修改

broker.shared_subscription_strategy = random

负载均衡策略描述
random在所有订阅中随机选择
round_robin按照订阅顺序轮询
sticky一直发往上次选取的订阅者
hash按照发布者ClientID的哈希值

后面还有代理订阅,保留消息,认证,ACL,这里暂时还没有用到所以就不在记录, 用到的话再补充


具体的实现马上补充

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

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

相关文章

【盘点】百家量子企业正展露头角

光子盒研究院 量子计算是一个可能彻底改变我们在金融、材料科学、密码学和药物发现等领域解决复杂问题的方式。过去十年左右,量子计算初创公司正迅速崛起。 现在,根据光子盒的量子企业数据库,全球大约有一千家公司直接参与到量子技术中&#…

反调试技术

文章目录 前言系统API实现方式IsDebuggerPresent (0x2)NtGlobalFlag(0x68)Heap flags(0x18)CheckRemoteDebuggerPresentNtQueryInformationProcessZwSetInformationThread 示例示例1比较明文字符串和输入字符串NtGlobalFlag时间差…

支持向量机SVM的原理和python实现

文章目录 1 SVM概述1.1 概念1.2 SVM的优缺点1.2.1 优点1.2.2 缺点 2 在python中使用SVM2.1 scikit-learn库2.2 SVM在scikit-learn库中的使用2.2.1 安装依赖库2.2.2 svm.SVC2.2.3 应用实例 总结 1 SVM概述 1.1 概念 支持向量机(SVM)是一类按监督学习方式…

CRM系统如何选择?哪些是必备功能?

CRM系统可以收集、整理并分析客户数据、优化企业销售流程、实现团队协作和共享,提高客户转化率,实现业绩增长。那么,如何选择CRM系统?CRM系统哪家好? 一、明确自己的业务需求 不同行业和规模的企业有不同的业务需求&…

JMU 软件工程经济学 复习总结

文章目录 碎碎念0. 基准收益率 i1. 现金流量图2. 净现值 NPV,内部收益率 IRR3. 单利,复利计算4. 等额年金NAV5. 动态回收期 P t ′ P_t Pt′​6. 固定资产折旧 [书P44]7. 增值税8. 软件行业增值税的即征即退9. 利息备付率 ICR,偿债备付率 DSC…

这6种最佳移动自动化测试工具你知道吗?

最好的移动自动化测试工具 在本文章关于移动应用程序测试的这一部分中,我们将研究 2023 年 6 种最佳移动自动化测试工具。 1、Appium Appium 是一个非常流行的开源自动化测试框架,支持各种操作系统的自动化。它可以与本机、混合和移动 Web 应用程序一…

微机原理基础知识

前言 微机原理期末复习的一些概念性的基础知识总结。 内容 (1)微处理器、微机与微机系统三者之间有什么异同? (1)把CPU(运算器和控制器)用大规模集成电路技术做在一个芯片上,即为微…

Vue实现Base64转png、jpg

method中写两个方法: 根据base64转图片的方法 根据转换出blob格式的文件导出的方法 //base64转pngbase64ImgtoFile(dataurl, filename file) {const arr dataurl.split(,)const mime arr[0].match(/:(.*?);/)[1]const suffix mime.split(/)[1]const bstr a…

Windows安装postgresql数据库图文教程

数据库使用排行榜:https://db-engines.com/en/ranking 目录 一、软件简介 二、软件下载 三、安装教程 四、启动教程 一、软件简介 PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计…

Python采集二手房源数据信息并做可视化展示

目录标题 前言环境使用:模块使用:python技术实现: <基本流程步骤>代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: Python 3.8 jupyter --> pip install jupyter notebook pycharm 也可以 模块使用: requests >>> pip instal…

【MySQL 数据查询】:提高查询的效率

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL数据查询的讲解&#xff08;基本、分组、排序、聚合、分页、条件查询&#xff09; 目录 前言一、基本查询二、条件查询三、聚合函数(统计函数)四、分组查询五、排序查询五、分页查询六、总结 一、基本查询 MySQ…

2020年CSP-J认证 CCF非专业级别软件能力认证第一轮真题--阅读程序题

2020 CCF认证第一轮&#xff08;CSP-J&#xff09;真题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff0c;判断题正确填√错误填X;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计4 分) 第一题 01 #include <cstdlib> …

Java调优

Java调优 Java 性能调优不像是学一门编程语言&#xff0c;无法通过直线式的思维来掌握和应用&#xff0c;它对于工程师的技术广度和深度都有着较高的要求。 互联网时代&#xff0c;一个简单的系统就囊括了应用程序、数据库、容器、操作系统、网络等技术&#xff0c;线上一旦出…

【深度学习】GPT-1

GPT-1是OpenAI在《Improving Language Understanding by Generative Pre-Training》中于2018年提出的生成式预训练语言模型。 1.GPT-1 简介 在自然语言处理任务中&#xff0c;存在大量无标签的语料数据&#xff0c;而有标签的语料数据相对较少&#xff0c;因此基于有监督训练的…

[建议收藏] Mysql+ETLCloud CDC+Doris实时数仓同步实战

一、业务需求及其痛点 随着数字化转型&#xff0c;企业需要对各种销售及营销数据进行实时同步分析&#xff0c;例如销售订单信息&#xff0c;库存信息&#xff0c;会员信息&#xff0c;设备状态信息等等&#xff0c;这些统计分析信息可以实时同步到 Doris中进行分析和统计&…

搜索跳出率:了解并优化用户体验

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是搜索跳出率&…

【Linux编辑器-vim使用】

目录 Linux编辑器-vim使用1.vim的基本概念2.vim的基本操作3.vim正常模式命令集4.vim末行模式命令集 Linux编辑器-vim使用 1.vim的基本概念 目前了解的vim有三种模式&#xff08;其实有好多模式&#xff09;&#xff0c;分别是命令模式、插入模式和底行模式&#xff0c;各模式…

Midjourney如何用参考图/垫图来绘画图

大家都知道AI绘画工具每次生成的效果都是随机的&#xff0c;但是现在很多AI绘图工具都提供了利用参考图/垫图的方式出图&#xff0c;这样就可以让让AI画作生成自己想要的布局、场景、色彩等等。 国内的AI绘图工具一般都好操作&#xff0c;国外主流的Midjourney也可以添加参考图…

ChatGPT/GPT-4 或将从根本上改变软件工程

文章目录 一、前言二、主要内容 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 编程也可能是最容易被 AI 技术取代的工作之一&#xff0c;软件的构建方式将产生根本性的转变。 今年以来&#xff0c;相信大家都听说过 ChatGPT、New Bing 和…

8.5 字节序及IP地址转换

目录 主机字节序和网络字节序 什么是字节序&#xff1f; 字节序转换函数 IP地址字节序转换函数 主机字节序和网络字节序 什么是字节序&#xff1f; 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序&#xff0c;分为&#xff1a; 大端字节序 (Big …