node.js - 测试 RabbitMQ/MQTT 性能

标签 node.js rabbitmq performance-testing mqtt

我已经通过 MQTT 插件成功配置了一个支持 MQTT 的 RabbitMQ 集群。目前,MQTT 消息通过与工作队列绑定(bind)的主题交换。所以所有的 MQTT 消息都存储在这个工作队列中。

现在我想通过研究 RabbitMQ 管理插件中的图表来测试这个集群的输入性能。我的计划是设置 2 个 NodeJS MQTT 发布者在 for 循环中触发许多 MQTT 消息,但这失败了。

当 for 循环运行超过 3000 次时,并非所有消息都存活...(在下面找到我的测试代码)我想听听您对此的看法:

  1. 邮件无法保存的原因可能是什么?
  2. 评估 RabbitMQ/MQTT 性能的最佳方法是什么?
  3. 我应该使用多个发布商吗?

代码:

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/

相关文章:

java - 使用 Puppet 测试自动化?

javascript - 如何全局定义套接字变量

node.js - 如何使用 Cosmos DB 触发器构建 Azure 函数?

javascript - 使用Mongoose关闭连接池

erlang - 无法在 Windows 中创建 Cookie 文件 RabbitMQ

python - Rabbitmq 鼠兔自动重连

c++ - 向 node.js 添加 OpenCV C++ 附加组件的最基本示例

rabbitmq - 运行客户端 channel 备份轮询器 Celery Beat

testing - 无法在现有 API 上运行 Taurus 性能测试

wcf - 负载测试应用程序 + WCF 服务