MQTT 消息队列压力测试。

本贴最后更新于 1659 天前,其中的信息可能已经时移世异

最近项目中对 MQTT 消息队列进行压力测试,简单记载 MQTT 消息插件的使用。

MQTT 消息队列压力测试

环境准备:
jmeter 插件下载:
mqttxmeter1.0.1jarwithdependencies.jar
把 MQTT 插件放在 %JMeter_Home%/lib/ext 下。重启 jmeter.
image.png

MQTT 连接。

image.png

Server name or IP: 被测 MQTT 服务器地址。
Port number: TCP 连接的端口 1883, SSL 连接则是 8883。
Timeout(s): 连接超时设置,以秒为单位。
user name: 连接 MQTT 的帐户名。
password: 连接 MQTT 的密码。(具体询问开发)
ClientId: 客户端标识,具体询问开发被模拟的客户端标识(注意一个标识快速连接多次会连接失败,并发记得参数化(经验))。
Keep alive(s): 心跳信号发送间隔。例如,300 表示客户端每隔 300 秒向服务器发出 ping 请求,以保持连接活跃。(注意,不正常 disconnect,连接还会继续保持。除非关掉 jmeter. 正常 mqtt disconnect 请无视。)
Connect attempt max: 第一次连接失败后,尝试重连的最大次数。超过该次数则认为连接失败。
Reconnect attempt max: 后续连接过程中连接失败后,尝试重连的最大次数。超过该次数则认为连接失败。
好了,连接上就可以进行消息发布了。


MQTT 发布

image.png

QoS Level: 服务质量,取值为 0,1,2,分别代表 MQTT 协议规范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精确一次(EXACTLY_ONCE)(网上 COPY,具体我就用了 0,用 1 2 发送失败。)
Topic name: 做为发布方,把消息发布到所属的话题中。
Add timestamp in payload: 如果勾选,发布的消息体开头会附带当前时间戳,利用它可以在消息接收端计算消息达到的延时。不勾选则只发送实际的消息体。

  1. Message type: 目前支持三种消息类(我只用了 String,其它请看网上的其它介绍。)
    1. String: 普通字符串 (如上面截图所示,你要发送的消息。具体上报什么,可找开发要相关 json 等。)
    2. Hex String: 以 16 进制数值表示的串,比如字符串 Hello, 可以表示为 48656C6C6F (其中,48 在 ascii 表中对应字母 H,依次类推)。通常 16 进制串用来构造非文本的消息体,例如描述某些私有的协议交互和控制信息等等。
    3. Random string with fixed length*: 按指定长度生成随机的串作为消息体。

此时消息发送成功了。


消息订阅

image.png
topic name(s): 想要订阅的主题。(可以订阅多个)多个主题以英文逗号分隔。
Sample on:

  1. specified elapsed time(ms): 订阅的主题每多少毫秒作为一个结果展示(个人理解)。在这些毫秒内所收到的消息全部展示在一个结果内。
  2. number of received messages: 每收到多少个消息作为一个结果展示(个人理解)。

断开连接

image.png
注意:主动支行 MQTT DisConnect 可以断开。若测试过程中手动停止,致使线程未运行 DisConnect,则连接不会断开。(已经过验证。)

测试过程中遇到的问题:

  1. MQTT 连接数未修改。连接到 1W 报错连接失败。
  2. 修改 MQTT 连接数后,成功并发到 5W,后续还会再进行测试。
    image.png

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...