首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试RabbitMQ/MQTT性能

测试RabbitMQ/MQTT性能
EN

Stack Overflow用户
提问于 2015-05-23 11:46:30
回答 1查看 3.1K关注 0票数 5

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

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

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

  1. 信息无法存活的原因是什么?
  2. 评估RabbitMQ/MQTT性能的最佳方法是什么?
  3. 我应该使用多个出版商吗?

代码:

代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

发布于 2018-01-06 11:35:45

消息正在打包到流套接字中,而实际的数据字节位于路径上:您的代码=>客户端的内存缓冲区=>发送系统套接字缓冲区=>系统套接字缓冲区=>服务器的代码。

如果使用localhost,则3K消息的套接字缓冲区的可能性很小,但确实存在。

我不太熟悉mqqt客户端,但是如果它使用套接字关闭操作执行client.end()操作,则可能有些mqtt帧根本无法到达您的服务器。

您有一些测试选项,例如:

  • client.end()之前睡一会儿,只睡一会儿;
  • 使用QoS=1消息,您仍然有机会释放一些未加标记的字节,这取决于mqtt窗口的大小;
  • 使用smth更合适,您可以在google上搜索"mqtt负载生成器“作为示例。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30412272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档