我已经通过 MQTT 插件成功配置了一个支持 MQTT 的 RabbitMQ 集群。目前,MQTT 消息通过与工作队列绑定(bind)的主题交换。所以所有的 MQTT 消息都存储在这个工作队列中。
现在我想通过研究 RabbitMQ 管理插件中的图表来测试这个集群的输入性能。我的计划是设置 2 个 NodeJS MQTT 发布者在 for 循环中触发许多 MQTT 消息,但这失败了。
当 for 循环运行超过 3000 次时,并非所有消息都存活...(在下面找到我的测试代码)我想听听您对此的看法:
- 邮件无法保存的原因可能是什么?
- 评估 RabbitMQ/MQTT 性能的最佳方法是什么?
- 我应该使用多个发布商吗?
代码:
var quantity = 3000;
var mqtt = require('mqtt');
var options = {
host: 'localhost',
port: 1883,
protocolId: 'MQIsdp',
rejectUnauthorized: false,
protocolId: 'MQIsdp',
protocolVersion: 3
};
var client = mqtt.connect(options);
for(var x=0; x<quantity; x++)
{
client.publish('/WSN/N536,563E/dynamic',"22");
console.log(x);
}
client.end();
最佳答案
消息被打包到流套接字中,实际数据字节在路径上的某处:[您的代码] => [客户端的内存缓冲区] => [发送系统套接字缓冲区] => [接收系统套接字缓冲区] = > [服务器代码].
如果您使用的是本地主机,则 3K 消息的套接字缓冲区的可能性很小,但存在。
我对 mqqt nodeJS 客户端不是很熟悉,但是如果它正在使用套接字关闭操作执行 client.end()
,那么某些 mqtt 帧可能根本无法到达您的服务器。
您有一些测试选项,例如:
- 在
client.end()
之前睡一觉,就一点点; - 使用 QoS=1 消息,您仍然有机会丢失一些未确认的字节,具体取决于 mqtt 窗口大小的配置;
- 使用 smth 更合适,您可以谷歌搜索“mqtt 负载生成器”以获取示例
关于node.js - 测试 RabbitMQ/MQTT 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30412272/