我为一个简单的场景写了一个小测试:
一个发布商和一个订阅者
Publisher发送1000000条消息
订阅者收到1000000条消息
首次使用RabbitMQ测试,扇出Exchange,RabbitMq节点类型Ram:320秒
使用Redis进行第二次测试,基本发布/次级:24秒
我错过了什么吗?为何如此差异?这是配置问题还是什么?
第一种情况:订阅者的一个node.js进程,发布者的一个进程,每个进程,一个连接到带有amqp节点模块的rabbitmq。 第二个scénario:订阅者的一个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:guest@localhost: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:guest@localhost: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);
}
});
});
});
答案 0 :(得分:22)
检查以确保:
还有其他一些可以调整的东西,但是如果不知道测试的细节,就很难猜到。我只想确保你比较“苹果与苹果”。
大多数消息传递产品可以尽可能快地以牺牲各种保证(如交付保证等)为代价,因此请确保首先了解您的应用程序的要求。如果您的唯一要求是将数据从A点推到B点,并且您可以容忍丢失某些消息,那么几乎每个消息传递系统都可以做到这一点,并且做得很好。更难的部分是确定除了原始速度之外你需要什么,并调整以满足这些要求。