MQTT
[TOC]
MQTT
By:weimenghua
Date:2023.07.18
Description:MQTT 协议
参考资料
EMQX 官网
一、MQTT 协议
MQTT 是一种基于发布/ 订阅模式的轻量级消息传输协议(Message Queuing Telemetry Transport,消息队列遥测传输协议),专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。 MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、电力、石油与能源等领域。
二、MQTT 消息服务器
1、EMQX 简介
EMQX 是一款开源 (opens new window)的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息,并保证延迟在亚毫秒级。
EMQX 支持多种协议,包括 MQTT (3.1、3.1.1 和 5.0)、HTTP、QUIC 和 WebSocket 等,保证各种网络环境和硬件设备的可访问性。EMQX 还提供了全面的 SSL/TLS 功能支持,比如双向认证以及多种身份验证机制,为物联网设备和应用程序提供可靠和高效的通信基础设施。
2、EMQX 搭建
- 1883:MQTT 协议端口
- 8084:MQTT/SSL 端口
- 8083:MQTT/WebSocket 端口
- 8080:HTTP API 端口
- 18083:Dashboard 管理控制台端口
运行容器
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.1.1
访问 Dashboard,默认账号密码:admin/public,修改后的密码:admin@123
http://127.0.0.1:18083
三、JMeter 测试 MQTT
下载 JMeter MQTT 插件 放到 $JMETER_HOME/lib/ext
目录下并重启 JMeter。
新建 MQTT Connect(MQTT 连接采样器)、MQTT Pub Sampler(MQTT 消息发布采样器)、MQTT Sub Sampler 请求,配置线程数 10 个,运行线程。
查看 EMQX 集群概览
在 MQTT 连接采样器后添加 MQTT Pub Sampler,用于发布消息
- QoS Level 为消息级别,支持0、1、2,分别代表 MQTT 协议规范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精确一次(EXACTLY_ONCE)
- Retained Mesages 为是否保留消息,支持 true、false
- Topic name 为主题名称
- Add timestamp in payload 在报文中加入时间戳
- Message type : String 可填写自定义字符串报文
- Message type : Hex string 可填写自定义十六进制报文
- Message type : Randmom string with fixed length 为固定长度随机字符,后面 Length 为指定长度
在 MQTT Connect 后添加 MQTT Sub Sampler,模拟订阅消息
- Qos Level 消息级别,支持0、1、2
- Topic name(s) 订阅主题名称,支持+/#通配符共享订阅
- Payload includes timestamp 报文是否包含时间戳
- Sample on : specified elapsed time(ms) 按毫秒时间统计订阅到消息
- Sample on : number of received messages 按次数统计订阅到消息
- Debug response 调试返回信息,即在察看结果树中显示详细订阅报文