使用测试客户端「玩转」MQTT 5.0_mqtt5.0 xmeter-程序员宅基地

技术标签: mqtt  物联网  测试工具  MQTT X  

近日,由 EMQ 开源的跨平台 MQTT 5.0 桌面测试客户端 MQTT X 发布了最新版本 v1.7.0。MQTT X 支持快速创建多个同时在线的 MQTT 客户端,方便测试 MQTT/TCP、MQTT/TLS、MQTT/WebSocket 的连接、发布、订阅功能及其他 MQTT 协议特性。

新发布的 1.7.0 版本对 MQTT 5.0 实现了更为全面的支持,是全球目前为止对 MQTT 5.0 支持最为完整的桌面测试客户端工具。同时新增了很多优化用户体验的功能。

在本文中,我们将详细介绍 MQTT X v1.7.0 新增功能的具体使用操作,特别是如何使用 MQTT X 来测试 MQTT 5.0 的诸多特性,以便读者可以在实际项目中更好地应用 MQTT 5.0。

准备 MQTT 消息服务器

在使用 MQTT X v1.7.0 对 MQTT 5.0 的特性进行测试之前,我们首先需要准备支持 MQTT 5.0 的 MQTT Broker。

本文将使用由 EMQ X Cloud 提供的免费在线 MQTT 5.0 服务器配合 MQTT X 客户端进行测试。作为一款全托管的云原生 MQTT 5.0 消息服务,EMQ X Cloud 可以在数分钟内快速创建一个 MQTT 服务,并且完整支持 MQTT 5.0 协议,也是全球首个全托管的 MQTT 5.0 公有云服务。

在测试开始前,免费在线的 MQTT 5.0 服务器服务器接入信息如下:

  • Broker: broker.emqx.io
  • TCP Port: 1883
  • SSL/TLS Port: 8883

MQTT 5.0 测试

用户属性

在 1.7.0 版本中,我们首先支持了用户属性的配置。用户属性是 MQTT 5.0 中非常实用的一个特性,它是一种自定义属性,允许用户向 MQTT 消息添加自己的元数据,传输额外的自定义信息以扩充更多应用场景,比如实现消息的分发,文件传输,语言区分等。该功能与 HTTP 的 Header 的概念非常类似。我们可以在创建客户端连接和发布消息时进行用户属性的配置。

客户端连接

点击新建按钮,来到新建客户端的页面,首先我们需要选择 MQTT 的版本为 5.0,这样就可以看到下方出现了配置用户属性的卡片,卡片内是一个可以配置键值对的输入框,可以点击右上角的添加按钮,来增加用户属性配置,点击每一行末尾的删除按钮可以删除配置,最后输入需要配置的属性名称和内容即可。连接成功后,MQTT 服务器就可以获取到该客户端的用户属性内容。

MQTT 连接时的用户属性

消息发布

除了客户端连接时的用户属性配置外,该版本还支持配置发布消息时的用户属性。当新建连接为 MQTT 5.0 的客户端时,我们可以看到右下角的发布消息的区域出现了一个 Meta 按钮,点击该按钮即可出现配置发布时的属性的卡片,我们可以在卡片顶部看到用户属性配置。

MQTT 发布时的用户属性

当配置用户属性完成后,点击保存按钮,此时我们再输入 Topic 和 Payload 点击发送,可以看到发送的消息框内,包含了当前消息所包含的用户属性的内容,如果当我们接收到的消息也包含了用户属性时,我们在接收到的消息框内也可以看到客户端发送过来的用户属性配置。

消息框内的用户属性
MQTT X 对于用户属性的支持,可以帮助开发者在测试和验证具有 MQTT 5.0 用户属性功能的应用场景时,对该功能进行快速验证和测试,从而提升开发和使用效率。

请求响应

在 1.7.0 版本中,支持了 MQTT 5.0 中的请求响应,提供对响应主题和对比数据属性的配置,控制响应消息被路由回请求的发布者。

因为 MQTT 协议是基于 Pub/Sub 模式的,区别于类似 HTTP 协议这样的请求响应模式,我们很难接收到一些响应消息。比如当我们要测试发布一条控制指令,我们很难获取到指令发送后的响应是什么,虽然可以实现,但过于复杂。而 MQTT 5.0 中的请求主题可以更快更有效的实现这一能力。

我们以发布一条开关灯的指令,并响应指令状态为例,展示响应主题的使用方法。我们点击 Meta 按钮,输入框内输入一个响应主题:/ack/1,输入一个对比数据:light,并在当前连接客户端订阅一个 /ack/1。

注意:MQTT 的请求响应是异步的,对比数据可以将响应消息与请求消息关联。

MQTT 响应主题与对比数据
我们使用 MQTT.js 再实现一个客户端,模拟接收控制指令的灯设备。当接收到开灯指令后,给响应主题发送一个开启成功的响应消息。实现关键代码:

client.on('message', (topic, payload, packet) => {
  console.log('Received Message:', topic, payload.toString())
  if (packet.properties && packet.properties.responseTopic) {
    client.publish(packet.properties.responseTopic, 'Success!', {
      qos: 0,
      retain: false,
    })
  }
})

点击发送消息,我们就能接收到来自灯设备接收开关指令成功后的响应消息了。

MQTT 发布消息
不过目前 MQTT X 对于请求响应特性仅支持在发送时配置响应主题和对比数据。后续将继续优化响应部分的配置,为用户带来更完整的测试请求响应的能力。

内容类型和载荷格式

在 1.7.0 版本中,支持指定配置有效载荷的格式和内容类型。允许在消息发布时指定载荷格式(二进制、文本)和 MIME 样式内容类型。我们只需要在发布消息前,点击 Meta 按钮,在输入框内输入 Content Type,点击设置 Payload Format Indicator 的值后,发布消息即可。
MQTT 内容类型和载荷格式
内容类型的一个比较典型的应用就是存放 MIME 类型,比如 text/plain 表示文本文件,audio/aac 表示音频文件,而 application/json 表示是一条 JSON 格式的应用消息。

而有效载荷指示器属性的值设置为 false 时,消息是未确定的字节,当该属性值设置为 true 时,意味着消息体中的有效载荷是 UTF-8 编码的字符数据。

这将有助于 MQTT 客户端或 MQTT 服务器可以更加有效的解析消息内容,而不用特意去对于消息体进行格式或类型的判断。

订阅选项

在 1.7.0 版本中还对 MQTT 5.0 中的订阅选项进行了支持。在新建一个 MQTT 5.0 的连接后,我们打开订阅主题的弹出框,可以看到下方出现了包含了 No Local、Retain as Published 和 Retain Handling 的配置选项,用户可以使用这些订阅选项来改变服务端的行为。
MQTT 订阅选项
设置 No Local flag 为 true,那么服务端将不会向你转发你自己发布的消息。否则如果你订阅了自己发布消息的主题,那么你将收到自己发布的所有消息。

设置 Retain as Published flag 为 true 时,可以指定服务端向客户端转发消息时是否要保留其中的 Retain 标识,而不是客户端直接依靠消息中的 Retain 标识来区分这是一个正常的转发消息还是一个保留消息。

Retain Handling 这一选项用来指定订阅建立时服务端是否向客户端发送保留消息。设置为 0,只要客户端订阅成功,服务端就发送保留消息;设置为 1,客户端订阅成功且该订阅此前不存在,服务端才发送保留消息;设置为 2,即便客户订阅成功,服务端也不会发送保留消息。

在后续版本中我们还将继续支持订阅标识符等 MQTT 5.0 中的新特性。

其他新功能使用

一键多主题订阅

在之前的版本中,我们每次打开订阅主题的弹框只能订阅一个主题,对于想要订阅多个主题的用户来说,每次都需要点击打开和关闭才能订阅多个主题,不是很方便。因此该版本中,我们做了优化,支持一次订阅多个主题。

我们打开订阅主题的弹出框后,在 Topic 输入框内,输入多个 Topic 并使用逗号(,)进行分割,点击确认订阅成功后,我们可以看到订阅列表中包含了多个 Topic。对于使用客户端层的别名功能也可以支持同时对多个 Topic 进行设置,同理使用逗号分隔(,)。

注意:别名输入框内的内容需要与 Topic 输入框内的 Topic 一一对应。

MQTT 一键多主题订阅

禁止消息自动滚动

设置中新增了对接收和发布消息时,消息列表自动滚动的控制。可以到设置页面中开启自动滚动功能,适用于当消息接收速率较慢时,帮助用户查看到最新消息。当接收消息的速率过快时,可以点击关闭该功能,帮助用户查看一些已发送或已接收到的旧消息。

注意:当关闭自动滚动功能后,可以提升部分发送和接收消息时的性能。

MQTT X 禁止消息自动滚动

结语

通过本文,相信大家对 MQTT X v1.7.0 的功能使用有了更多了解。MQTT X 与 EMQ X 配合使用,可以帮助您充分掌握 MQTT 5.0 协议,并在实际项目中将其特性更好地加以应用。

后续我们还会完善 MQTT X 对类似主题别名、请求响应和订阅标识符等配置的支持能力,敬请期待。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/testing-mqtt-5-with-the-mqtt-client

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/emqx_broker/article/details/122454264

智能推荐

集丰照明|LED五种调光方式详解(DALI/DMX/0-10V/PWM/可控硅)_dali调光曲线在线公式计算-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏16次。LED五种调光方式详解LED的发光原理同传统照明不同,同功率的 LED 光源,因其采用的芯片不同,电流电压参数则不同,故其内部布线结构和电路分布也不同,导致了各生产厂商的光源对调光驱动的要求也不尽相同,因此控制系统和光源电器不匹配也成了行业内的通病,同时 LED 的多元化也对控制系统也提出了更高的挑战。如果控制系统和照明设备不配套,可能会造成灯光熄灭或闪烁,并可能对 LED 的驱动电路和光源造成损坏。市面上常见的有五种调光方式:DALI调光、可控硅调光、PWM调光、0/1-10V调光、DMX调光_dali调光曲线在线公式计算

思科cisco交换机如何查找环路及解决方法-程序员宅基地

文章浏览阅读8.5k次。思科cisco交换机如何查找环路及解决方法如何能直观快速的判断cisco交换机是否出现了环路?并快速定位交换机环路的位置呢?这成为一个难题?环路查看目前没有什么最好的办法,只能通过一些信息直观查看。cisco环境下除了生成树还有很多预防环路的命令。环路会产生广播风暴,严重的会导致联络阻塞,环路出现时交换机会发出提示信息的,可以通过网管软件、察看日志服务器或直接登陆交换机发现..._思科交换机查看环路命令

CIKM 2016 aNMM: Ranking Short Answer Texts with Attention-Based Neural Matching Model-程序员宅基地

文章浏览阅读3.9k次。中文简介:本文针对当前深度学习模型包括基于CNN或者LSTM的模型适用于Answer Sentence Selection这个task时必须额外combine 传统的text matching feature的问题,提出了一个attention based neural matching model。该模型提出使用value-shared weighting scheme以及基于attention_anmm: ranking short answer texts with attention-based neural matching model

Android Studio更改明暗主题_androidstudio主题更改-程序员宅基地

文章浏览阅读9.6k次。Android更改主题_androidstudio主题更改

统计难题 字典树_嵌入式 字典树-程序员宅基地

文章浏览阅读211次。题目 :点击打开链接 利用数组来创建字典树,感觉比指针的好理解#include #include#include #include using namespace std;const int maxn = 500001;int tr[maxn][26], pass[maxn],ll;char str[maxn];void insert(){ int i_嵌入式 字典树

ssh公钥都追加到authorized_keys文件了,但是还是无法免秘钥登陆_~/.ssh/authorized_keys 追加文件后 需要重启配置嘛-程序员宅基地

文章浏览阅读3.7w次,点赞2次,收藏27次。步骤: 1、主机生成公钥 ssh-keygen -t rsa -P '' 一路回车 2、从主机节点拷贝id-rsa.pub到从机worker1scp /root/.ssh/id_rsa.pub root@worker1:/root/.ssh/id_rsa.pub.master 3、在主机和从机上执行如下命令cat /root/.ssh/id_rsa.p..._~/.ssh/authorized_keys 追加文件后 需要重启配置嘛

随便推点

6.Java -方法-程序员宅基地

文章浏览阅读64次。一、 何为方法二、 方法的定义及调用三、 方法重载四、 命令行传参五、 可变参数六、 递归

防泄密软件的重要性-程序员宅基地

文章浏览阅读233次。1.防泄密软件的设计思想  信息时代的高速发展,泄密形式越来越多样化,单单只是对外置接口进行禁用已经远远无法满足企业的信息保护要求。防泄密软件应站在时代的前端,依据“事前主动防御、事中全程控制、事后有据可查”的设计理念,从源头保护企业的信息安全,为企业提供一体化的信息安全解决方案。即使泄密事件无可必免的发生了,也能够为企业提供有用的数据以供调查,将企业的损失降到最低。  事前主动防御:文件在创建、编辑、保存时自动加密,能保证存放在硬盘上的文件是密文,防止主动泄密。指定类型的文件能自动备份,防止恶意删

C语言面试题(字符和字符串处理)_c语言字符串面经-程序员宅基地

文章浏览阅读690次,点赞2次,收藏8次。C语言面试必备,字符串处理相关面试题_c语言字符串面经

显著性评价指标:眼注视点和目标检测指标(附参考论文)_fixation map-程序员宅基地

文章浏览阅读2.8k次。显著性一般分为物体的显著性(saliency object detection)以及眼注视点( eye fixation saliency)的显著性,虽然两者都能展现吸引用户注意力的物体或者区域,但是侧重点不同。物体的显著性主要在于图像中各个物体轮廓的检测,具体来说就是目标检测,语义分割等等都涉及到物体的显著性;而眼注视点的显著性更多是关注用户观看的区域,和用户的观看行为有联系。由于用户在观看全景视频时,往往会关注视频中比较突出的部分,所以两者也有交集_fixation map

Linux源码安装boost_linux下boost安装-程序员宅基地

文章浏览阅读180次。如选择1.60.0。_linux下boost安装

简述物联网系统的分层架构,简要说明各层级的功能,并结合课程内容谈谈各层有哪些物联网的技术运用,在DIY智慧小屋案例中各层都有哪些软硬件构成。_物联网分为几个层次?分别是什么?-程序员宅基地

文章浏览阅读2.1w次,点赞3次,收藏16次。物联网大致可以分成:感知层、网络层、平台层和应用层。1、感知层——感知信息作为物联网的核心,承担感知信息作用的传感器,一直是工业领域和信息技术领域发展的重点,传感器不仅感知信号、标识物体,还具有处理控制功能。感知层由各种百传感器以及传感器网关构成,包括二氧化碳浓度传感器、温度传感器、湿度传感器、二维码标签、度RFID标签和读写器、摄像头、GPS等感知终端。感知层的知作用相当于人的眼耳鼻喉..._物联网分为几个层次?分别是什么?