初出茅庐的小李博客之用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

相关文章

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主