tôi đã viết một thử nghiệm nhỏ cho một kịch bản đơn giản:Redis/RabbitMQ - Pub/Sub - Biểu diễn
Một nhà xuất bản và một thuê bao
Nhà xuất bản gửi 1000000 điệp
Subscriber nhận được 1000000 thông điệp
Thử nghiệm đầu tiên với RabbitMQ, trao đổi fanout, RabbitMq loại nút Ram: 320 giây
Thử nghiệm thứ hai với Redis, p cơ bản ub/Sub: 24 giây
Tôi có thiếu gì đó không? Tại sao lại có sự khác biệt như vậy? Đây có phải là vấn đề về cấu hình hay không?
Kịch bản đầu tiên: một quy trình node.js cho người đăng ký, một cho nhà xuất bản, mỗi người, một kết nối với thỏmq với mô-đun nút amqp. Scénario thứ hai: một quá trình node.js cho người đăng ký, một cho nhà xuất bản, mỗi người có một kết nối với redis.
Mọi trợ giúp đều được chào đón để hiểu ... Tôi có thể chia sẻ mã nếu cần.
Tôi khá mới đối với tất cả điều này. Những gì tôi cần, là một hệ thống tin nhắn pub/sub biểu diễn cao. Tôi muốn có khả năng phân cụm.
Để chạy thử nghiệm của tôi, tôi chỉ cần khởi động máy chủ RabbitMQ (cấu hình mặc định) và tôi sử dụng như sau
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);
}
});
});
});
Bạn đã tìm thấy câu trả lời cho điều này chưa? –