我寫了一個小測試一個簡單的場景:的Redis/RabbitMQ的 - 的Pub/Sub - 性能
一個發佈者和一個用戶
出版商送百萬的消息
用戶收到1000000個消息
第一次用RabbitMQ測試,扇出交換,RabbitMq節點類型Ram:320秒
用Redis進行第二次測試,基本爲p ub/Sub:24秒
我錯過了什麼嗎?爲什麼有這樣的差異?這是一個配置問題或什麼?
第一種情況:訂閱者需要一個node.js進程,發佈者需要一個node.js進程,每個進程需要一個到具有amqp節點模塊的rabbitmq連接。 第二個分區:訂戶的一個node.js進程,一個用於發佈者,每個進程都有一個到redis的連接。
任何幫助都很好理解......如果需要,我可以共享代碼。
我對所有這些都很陌生。 我需要的是一個高性能的酒吧/消息系統。我想擁有集羣功能。
運行我的測試,我只是啓動的RabbitMQ服務器(默認配置)和我用下面的
Publisher.js
var sys = require('sys');
var amqp = require('amqp');
var nb_messages = process.argv[2];
var connection = amqp.createConnection({url: 'amqp://guest:[email protected]:5672'});
connection.addListener('ready', function() {
exchangeName = 'myexchange';
var start = end = null;
var exchange = connection.exchange(exchangeName, {type: 'fanout'}, function(exchange){
start = (new Date()).getTime();
for(i=1; i <= nb_messages; i++){
if (i%1000 == 0){
console.log("x");
}
exchange.publish("", "hello");
}
end = (new Date()).getTime();
console.log("Publishing duration: "+((end-start)/1000)+" sec");
process.exit(0);
});
});
Subscriber.js
var sys = require('sys');
var amqp = require('amqp');
var nb_messages = process.argv[2];
var connection = amqp.createConnection({url: 'amqp://guest:[email protected]:5672'});
connection.addListener('ready', function() {
exchangeName = 'myexchange';
queueName = 'myqueue'+Math.random();
var queue = connection.queue(queueName, function (queue) {
queue.bind(exchangeName, "");
queue.start = false;
queue.nb_messages = 0;
queue.subscribe(function (message) {
if (!queue.start){
queue.start = (new Date()).getTime();
}
queue.nb_messages++;
if (queue.nb_messages % 1000 == 0){
console.log('+');
}
if (queue.nb_messages >= nb_messages){
queue.end = (new Date()).getTime();
console.log("Ending at "+queue.end);
console.log("Receive duration: "+((queue.end - queue.start)/1000));
process.exit(0);
}
});
});
});
您是否找到了答案? –