尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

MQTT 压测怎么起步?装好 MQTT JMeter 插件,一次跑通连接、发布、订阅

MQTT 压测怎么起步?装好 MQTT JMeter 插件,一次跑通连接、发布、订阅 MQTT 压测怎么起步装好 MQTT JMeter 插件一次跑通连接、发布、订阅【免费下载链接】mqtt-jmeterMQTT JMeter Plugin项目地址: https://gitcode.com/gh_mirrors/mq/mqtt-jmeterMQTT JMeter 插件mqtt-jmeter由 XMeter 团队维护作用是让 Apache JMeter 能像测 HTTP 一样对 MQTT 服务器做性能压测覆盖连接、发布、订阅三类场景。读完这篇你会把插件装进 JMeter、跑通第一条消息并搭出三个可直接改造的压测脚本。先认清这个工具 原生 JMeter 的采样器围绕 HTTP、TCP 设计而 MQTT 是物联网设备最常用的发布/订阅消息发出去、按需收协议它没有原生支持。这个插件补的就是这块提供四个采样器——MQTT Connect建连、MQTT Pub Sampler发消息、MQTT Sub Sampler收消息、MQTT DisConnect断开四者按顺序串起来就是一次完整的设备通信模拟。适合两类人给 EMQX 这类 MQTT Broker 做性能基准测试的同学以及要验证海量设备连接能力的开发者。EMQ 服务器的性能测试报告就是用这套插件跑出来的。从 0 到 1装好插件并跑通第一条消息 环境检查JMeter 3.2 及以上Java 8 及以上。拿插件包两种方式任选。直接用现成的仓库里Download/v2.0.2/目录下是 v2.0.2 版本把主包mqtt-xmeter-2.0.2-jar-with-dependencies.jar和公共库xmeter-plugins-common-0.0.6-SNAPSHOT.jar拷出来如果要用 Apache Fuse 的 MQTT 实现再带上mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar。自己构建克隆源码后执行mvn install产物在 target 目录git clone https://gitcode.com/gh_mirrors/mq/mqtt-jmeter cd mqtt-jmeter mvn install放进 JMeter把 jar 拷到 JMeter 安装目录的lib/ext文件夹然后重启 JMeter。确认装上了新建测试计划在线程组上右键 Add → Sampler菜单里应多出四个 MQTT 选项安装成功后Sampler 菜单末尾会多出这四个 MQTT 采样器跑通第一条消息按顺序加三个采样器。先加 MQTT Connect填127.0.0.1、端口 1883跑一遍响应码为 0 即建连成功再加 MQTT Pub Sampler主题填test_topic发一条文本最后加 MQTT Sub Sampler 订阅同一主题结果树里就能看到收下来的消息。顺序不能乱Pub 和 Sub 都复用 Connect 建立的连接没建连它们会直接失败。逐项拆解配置连接、发布、订阅三件套怎么填 ⚙️跑通之后每个参数值得过一遍。下面按采样器拆开讲格式统一为参数含义 推荐值或易错点。连接采样器MQTT Connect先看连接采样器的完整面板后面逐组对应讲解Server name or IP目标 broker 的地址填 IP 或域名。只填地址本身前面不要带tcp://、ssl://这类协议前缀这是最常见的填错点。Port number明文 TCP 用 1883SSL 用 8883。MQTT version可选 3.1 和 3.1.1。部分云厂商只认 3.1.1比如 Azure IoT Hub连不上时先换这个试。Timeout建连超时秒数默认 10 秒。ProtocolsTCP、SSL、WS、WSS 四种选 SSL/WSS 后还支持单向或双向Dual SSL authentication证书校验。User name / Password服务器开了账号认证才需要填。ClientId客户端 ID默认conn_。建议勾选随机后缀否则多个线程共用同一个 ID新连接会把旧连接顶下线。Keep alive心跳包ping 包发送间隔默认 300 秒也就是每 5 分钟 ping 一次。Connect attempt max / Reconnect attempt max首次建连、断线重连各自的最大尝试次数默认 0填 -1 表示不限。Clean session想跨连接保留会话状态就填 false每次全新会话则填 true。发布采样器MQTT Pub Sampler发布采样器面板不长参数都在两行里QoS Level服务质量等级决定消息投递的可靠程度0 是最多一次1 是至少一次2 是恰好一次。Topic name消息发往的目标主题例如test_topic。Retained messages置 true 后 broker 会保留该主题最后一条消息新订阅者上线立刻收到。Add timestamp in payload在负载头部写入发送时间戳配合 Sub 采样器算消息延迟用。Message type三种负载——String可写 JMeter 变量、Hex string自动转成二进制发出、Random string with fixed length按指定长度随机生成默认 1024 字节约 1KB。易错点它复用 Connect 的既有连接连接没就绪时采样器直接失败先保证 Connect 跑在前面。订阅采样器MQTT Sub Sampler订阅侧的选项和发布侧对得上还多了采样节奏控制QoS Level同发布侧0/1/2。Topic name(s)可一次订多个主题用英文逗号分隔也支持变量例如topic1,topic2,topic3${MyVar}。Payload includes timestamp负载里带时间戳时勾选要和发布侧的 timestamp 开关联动两边都要开。Sample on采样触发方式。默认按固定间隔毫秒默认 1000间隔内收到的多条消息汇总成一条结果另一档按消息条数触发默认 1。Debug response把收到的消息原文打印到响应里调试脚本时建议开着跑通后关掉。延迟怎么算消息延迟 接收时刻 − 负载里的时间戳。若发布端和订阅端不在同一台机器两边时钟有偏差算出来的值只作参考。SSL/TLS 加密连接生产环境测试走加密。把端口改成 8883Protocol 选 SSL勾选 Dual SSL authentication 即启用双向证书校验。证书文件怎么来以 emqtt 为例服务器自带的etc/certs目录下有现成文件cacert.pemCA 证书、cert.pem服务器证书、client-cert.pem 和 client-key.pem客户端证书与私钥这里的客户端就是 JMeter 的虚拟用户。用 keytool 把 CA 和客户端证书导入 JKS 密钥库再用 openssl 把客户端证书导出成 p12keytool -import -alias cacert -keystore emqtt.jks -file cacert.pem -storepass YOUR_PASSWORD -trustcacerts -noprompt keytool -import -alias client -keystore emqtt.jks -file client-cert.pem -storepass YOUR_PASSWORD openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.p12 -password pass:YOUR_PASSWORD回到采样器填写Trust Key Store 指向 emqtt.jksClient Certification 指向 client.p12两栏分别填对应密码。注意截图中服务器地址写的是${server}这就是用 JMeter 变量做参数化换环境时只改变量不改脚本拿真实场景练手三个现成脚本 示例脚本目录 里有三个 .jmx结构并排看一眼就明白各测什么单向发布订阅pubsub_unidirection.jmx目标验证订阅方能稳定收到发布方发出的消息。做法Pub Group 和 Sub Group 两个线程组发布组循环发消息、订阅组循环收采样器之间用定时器拉开间隔。预期订阅采样器每轮都成功结果树里收到的条数对得上发送量。双向通信pubsub_bidirection.jmx目标模拟设备端和移动端互相收发的真实物联网链路。做法Device Group 与 Mobile Group 各自走连接→发布→订阅→断开组间各插一段等待3 秒和 4 秒保证一方先连上、另一方再开始订阅。预期两组的订阅采样器都能收到对方的消息两条链路互不串扰。大规模背景连接background_connection.jmx目标压测 broker 的并发连接容量。做法线程只建连、只发心跳不跑业务消息通过 If Controller 分支可选地在建连后订阅一个主题脚本里的xmeter_runtime_vars用户定义变量集要改成你自己的环境值。预期线程数逐步放大时连接成功率保持稳定broker 侧内存和 CPU 增长可预期断连率维持在低位。排坑手册跑压测前先看这 4 类高频故障 现象排查思路Pub / Sub 采样器秒失败它们复用已有连接。先确认 Connect 跑在前面且成功反过来Disconnect 在无连接时也会失败属正常逻辑Connect 连不上 broker依次查地址与端口1883 或 8883是否正确、地址前是否误加了协议前缀、broker 进程是否在跑、防火墙是否放行Sampler 菜单里没有 MQTT 选项jar 是否真的放进了lib/extJMeter 是否重启过JMeter 版本是否 3.2 以上SSL 握手失败端口改 8883勾选双向认证jks/p12 路径与密码逐一核对证书链要完整别漏导入 CA 证书插件装好、四个采样器都能跑压测的门槛其实就跨过去了。接下来真正花时间的是设计加压节奏和读结果线程怎么加、QoS 0/1/2 的差异有多大、延迟指标在不同压力下如何变化。建议先用 1 个线程把整条链路跑稳再逐步放大每一轮都留一份聚合报告你的 broker 性能基线就是这样积累出来的。把服务器地址、主题改成用户定义变量做参数化示例脚本里的xmeter_runtime_vars就是现成模板打开发布端时间戳和订阅端时间戳校验先测出消息延迟基线再对比不同 QoS、不同线程数下的变化用阶梯式线程数逐步加压同时观察 broker 侧连接数、内存曲线定位容量拐点【免费下载链接】mqtt-jmeterMQTT JMeter Plugin项目地址: https://gitcode.com/gh_mirrors/mq/mqtt-jmeter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表