【内容描述】:用nodejs做生产者发布消息到另外一台的rabbitmq服务器上(重点是rabbitmq在另外一台计算机上)。 【目标】: message为一个4k的文本,最短时间发送10万个message。 【现象】: 1.在message为4k,一次性for循环publish 4万个以内,速度很快完成,cpu使用很低,只会在for循环时高一点(很短),但是,超过5万速度明显慢的比蜗牛还慢,cpu使用率高(几乎满掉),而且很久,速度直到publish回调函数成功完成到剩下的在四万个以内才会有变高,cpu使用率降低。 2.在message很小,就几字节的时候,for循环publish 10万或者20万,没有任何差别,速度高效。 3.上诉情况如果rabbitmq服务器在本地与nodejs生产者在同一台电脑,无论message大小为那种情况,都不会有问题,速度比远程调用速度快上六七倍。
【我的问题】:为什么当message为4k,rabbitmq在远程(另一台电脑上)会有一个5万的界限(即在这个界限两边速度差距这么大)?如何解决这个问题?求大神讲解?在线等....
【代码】: var amqp = require("amqp"); var fs = require('fs'); var exchName = "topic"; //exhange 名称 var routeKey = "topic"; // 路由键
var connOptions = { host: '192.168.65.170' , port: 5672 , login: 'guest' , password: 'guest' , authMechanism: 'AMQPLAIN' , vhost: '/' , ssl: { enabled : false } }
var exchOption = { type: 'topic' ,durable: true ,autoDelete: false ,confirm: false }
var messOption = { contentEncoding: "utf-8" ,deliveryMode: 1 }
var message = fs.readFileSync('2.txt').toString('utf-8'); var conn = amqp.createConnection(connOptions); //连接rabbitmq var n=100000; // 循环数
var messFunc = function(e){ }
var exchFunc = function(exchange){ now = new Date(); mill = now.getMilliseconds(); console.log(now,mill); //[此处是我问题的点] for (var i = 0; i <n; i++) { exchange.publish(routeKey,new Buffer(message),'',messFunc); //发布消息 因为exchange属性confirm为false,此处不会回调messFunc } now = new Date(); mill = now.getMilliseconds(); console.log(now,mill); }
var connFunc = function(){ console.log("ready"); var exch = conn.exchange(exchName,exchOption,exchFunc); //获取exchange 生成生产者 }
conn.on('ready',connFunc); //rabbitmq连接成功调用connFunc