私は単純なシナリオのために少しテストを書いた:のRedis/RabbitMQの - パブ/サブ - 演劇
一つのパブリッシャとのサブスクライバ
Publisherは1000000のメッセージ
を送信する加入者が1000000のメッセージ
を受け取りますRabbitMQ、ファンアウトエクスチェンジ、RabbitMqノードタイプのラム:320秒で最初のテスト
Redisの2番目のテスト、基本的なp ub /サブ:24秒
私に何か不足していますか?なぜそのような違いがありますか?これは設定上の問題なのでしょうか?
最初のシナリオ:サブスクライバ用に1つのnode.jsプロセス、1つはパブリッシャ用、もう1つはamqpノードモジュールを使用したrabbitmqへの接続です。 第2のシナリオ:サブスクライバのための1つのnode.jsプロセス、1つは発行者用、もう1つはredisへの接続です。
私は必要に応じてコードを共有することができます。
私はこのすべてにかなり新しいです。 私が必要とするのは、高性能pub/subメッセージングシステムです。私はクラスタリング機能を持っていたいと思います。
私のテストを実行するには、私だけの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);
}
});
});
});
あなたはこれに対する答えを見つけましたか? –