初出茅庐的小李博客之用MQTT.fx软件进行消息发布与订阅【 基于EMQX Cloud】

本文主要是介绍初出茅庐的小李博客之用MQTT.fx软件进行消息发布与订阅【 基于EMQX Cloud】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MQTT.fx软件使用简单介绍

在这里插入图片描述
MQTT.fx 的软件界面如下图所示,最上方为 MQTT Broker 连接地址栏,及其连接配置。其下方功能 Tabs 含有 Publish 发布栏、Subscribe 订阅栏、Scripts 脚本栏、Broker Status 状态消息栏、Log 日志信息控制栏。
在这里插入图片描述

连接之前要明确几个概念

以下概念仅供学习参考 ,个人理解 描述可能不严谨

概念1:什么是消息发布

我的个人理解 就是一个设备是作为信息提供的一方 也就是信息的生产者

概念2:什么是消息订阅

我的个人理解 就是一个设备作为消息获取的以防 也就是信息的消费者

概念3:什么是主题

我的个人理解 就是设备进行信息交互的平台 可以类比公众号我订阅了某个公众号那这个公众号将来更新了文章我就可以阅读,信息的消费者获取信息的一个渠道,同时信息的生产者也可以把信息传到上面供信息的消费者使用,这个公众号就是一个转发信息的桥梁

MQTT客户端跟MQTT服务器都可以进行信息的发布

在这里插入图片描述

MQTT客户端一旦连接到服务端,便可以发布消息。 每条发布的MQTT消息必须包含一个主题。MQTT服务器可以通过主题确定将消息转发给哪些客户端。(注:这里的消息指的是MQTT报文。)

在建立通信前简单提一下QoS(Quality of Service)QoS表示MQTT消息的服务质量等级。QoS有三个级别:0、1和2。QoS决定MQTT通讯有什么样的服务保证。
QoS:发布消息的服务质量,即:保证消息传递的次数
00:最多一次,即:<=1
01:至少一次,即:>=1
10:一次,即:=1
11:预留

什么是报文标识符
报文标识符可用于对MQTT报文进行标识。不同的MQTT报文所拥有的标识符不同。MQTT设备可以通过该标识符对MQTT报文进行甄别和管理。请注意:报文标识符的内容与QoS级别有密不可分的关系。只有QoS级别大于0时,报文标识符才是非零数值。如果QoS等于0,报文标识符为0。这里不展开说 如果大家对这个协议感兴趣大家可以看MQTT协议的详细文档
我这里简单描述下
在MQTT协议中规定了一个固定报头 固定报头的第一个字节有8个bit
其中高4位的排列组合表示MQTT数据包的类型,
在这里插入图片描述
总共4个bit 排列组合有16种情况 分别是以下类型

0 Reserved — 保留
1 CONNECT 客户端到服务器 客户端请求连接到服务器
2 CONNACK 服务器到客户端 连接确认
3 PUBLISH 双向 发布消息
4 PUBACK 双向 发布确认
5 PUBREC 双向 发布收到(保证第1部分到达)
6 PUBREL 双向 发布释放(保证第2部分到达)
7 PUBCOMP 双向 发布完成(保证第3部分到达)
8 SUBSCRIBE 客户端到服务器 客户端请求订阅
9 SUBACK 服务器到客户端 订阅确认
10 UNSUBSCRIBE 客户端到服务器 请求取消订阅
11 UNSUBACK 服务器到客户端 取消订阅确认
12 PINGREQ 客户端到服务器 PING请求
13 PINGRESP 服务器到客户端 PING应答
14DISCONNECT 客户端到服务器 中断连接
15Reserved — 保留

Qos 就是PUBLIS 数据包的低4位的bit2 bit1 其他数据包这两位有其他的含义或者保留
在这里插入图片描述

保留标志的理解

在默认情况下,当客户端订阅了某一主题后,并不会马上接收到该主题的信息。只有在客户端订阅该主题后,服务端接收到该主题的新信息时,服务端才会将最新接收到的该主题信息推送给客户端。
但是在有些情况下,我们需要客户端在订阅了某一主题后马上接收到一条该主题的信息。这时候就需要用到保留标志这一信息。

有效载荷的理解

有效載荷是我们希望通过MQTT所发送的实际内容。我们可以使用MQTT协议发送文本,图像等格式的内容。这些内容都是通过有效載荷所发送的。

重发标志的理解

当MQTT报文的接收方没有及时确认收到报文时,发送方会重复发送MQTT报文。在重复发送MQTT报文时,发送方会将此“重发标志”设置为true。请注意,重发标志只在QoS级别大于0时使用。因为大于0 表示 【01】:至少一次,即:>=1 【10】:一次,即:=1

连接设置可以参考我上一篇博客

这里已经连接成功
在这里插入图片描述

订阅/发送消息
完成连接的建立之后,即可开始订阅消息。因为 MQTT 协议采用的是订阅/推送的方式,所以我们需要在连接之后订阅主题,之后主题上有消息产生即可收到来自 EMQX Cloud 推送。

我在 EMQX Clouds 开启了数据功能
在这里插入图片描述
这里的操作需要用到SQL 语言 我不太了解 就用示例的几个例子进行了简单的配置

具体配置如下
在这里插入图片描述
我的理解是当客户端 建立了对这个主题的连接时候会触发一个事件 这个事件会触发一个消息
消息是JSON 格式

订阅主题

订阅两个主题:

在这里插入图片描述
在这里插入图片描述

向某个主题发布消息

这是向AQST/TEST 发布的消息
在这里插入图片描述
这是收到AQST/TEST 发布的消息
在这里插入图片描述
这是向t/a这个主题发布的消息
在这里插入图片描述
这是订阅了t/a这个主题收到的消息
在这里插入图片描述
至此:
两个主题的订阅跟发布都测试通过了
看一下后台数据记录,连接数最多就是1 订阅最多是2 报文流量根据发送的信息数据量也不一样。

连接数含义
连接数图表展示了在选择时间段内,连接到部署的客户端的数量。这里连接的客户端数也包含了保留会话的离线客户端。保留会话,即客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。

订阅数含义
订阅数图表展示在选择的时间段内部署的总订阅数

总流量含义:接收和发送消息的报文总量。
接受报文流量:从设备或应用端发送到部署的消息的报文总量。
发送报文流量:从部署发送到设备或应用端的消息的报文总量。

消息流入流出含义
消息流入流出图表展示在选择的时间段内,部署接收到的消息数、发送出去的消息数和未被订阅的消息数。
部署接收到的消息为从设备或应用端发送到部署的消息数。
部署发送的消息为从部署发送到设备或应用端的消息

报文流量含义
报文流量图表展示在选择的时间段内,部署接收到的消息以及发送出去的消息报文流量,包含以下3种数据:

在这里插入图片描述
丢弃消息
丢弃消息图表显示在所选时间段内发送阶段丢弃的消息。消息被丢弃的原因可能是报文太大、消息队列已满或消息过期。

好了、之所以用MQTT.fx软件进行消息发布与订阅是为了测试消息发布跟订阅的流程,明确主题、订阅、发布的概念,当然MQTT协议内容很多,后续会考虑用ESP32 当作MQTT客户端进行数据的通信测试。

这篇关于初出茅庐的小李博客之用MQTT.fx软件进行消息发布与订阅【 基于EMQX Cloud】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001750

相关文章

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

springboot整合mqtt的步骤示例详解

《springboot整合mqtt的步骤示例详解》MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,适用于物联网设备之间的通信,本文介绍Sprin... 目录1、引入依赖包2、yml配置3、创建配置4、自定义注解6、使用示例使用场景:mqtt可用于消息发

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件