Я создаю систему анализа с миллионом пользователей онлайн в одно и то же время. Я использую RabbitMQ, такие как сообщение брокеру, чтобы уменьшить емкость для сервераВысокая производительность на сервере Nodejs RabbitMQ
Вот моя схема
Моя система включает 3 компонента.
Издательский сервер: (Производитель) Эта система была построена на nodejs. Цель этой системы публиковать сообщения в queue
очереди RabbitMQ: Эта система хранятся сообщения, отправленные publisher server
. После этого открывается одно соединение для отправки сообщения из очереди для subscriber server
.
подписчика сервер (Consumer): Эта система принимает сообщения от queue
Публикация исходного сервера код
var amqp = require('amqplib/callback_api');
amqp.connect("amqp://localhost", function(error, connect) {
if (error) {
return callback(-1, null);
} else {
connect.createChannel(function(error, channel) {
if (error) {
return callback(-3, null);
} else {
var q = 'logs';
var msg = data; // object
// convert msg object to buffer
var new_msg = Buffer.from(JSON.stringify(msg), 'binary');
channel.assertExchange(q, 'fanout', { durable: false });
channel.publish(q, 'message_queues', new Buffer(new_msg));
console.log(" [x] Sent %s", new_msg);
return callback(null, msg);
}
});
}
});
создают исключительно обмен
"message_queues"
с"fanout"
отправить вещание на все потребитель
сервер подписчика исходный код
var amqp = require('amqplib/callback_api');
amqp.connect("amqp://localhost", function(error, connect) {
if (error) {
console.log('111');
} else {
connect.createChannel(function(error, channel) {
if (error) {
console.log('1');
} else {
var ex = 'logs';
channel.assertExchange(ex, 'fanout', { durable: false });
channel.assertQueue('message_queues', { exclusive: true }, function(err, q) {
if (err) {
console.log('123');
} else {
console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q.queue);
channel.bindQueue(q.queue, ex, 'message_queues');
channel.consume(q.queue, function(msg) {
console.log(" [x] %s", msg.content.toString());
}, { noAck: true });
}
});
}
});
}
});
получить messge от
"message_queues"
обмена
Когда я реализую отправить сообщение. Система работает хорошо, однако я попытался проверить производительность теста этой системы (с ~ 1000 пользователей, отправленных в секунду), тогда система имеет некоторые проблемы. Система выглядит как перегрузка/переполнение буфера (или что-то не работает).
Я только что читал про rabbitmq 2 дня назад. Я знаю, что его учебники является основным примером, так что мне нужна помощь, чтобы построить системы в реальном мире, чем .. Любого решения & предложение
Надежда, что мой вопрос сделать чувство
Я попытался включить инструмент управления веб-ui, но я не могу снова подключить сервер кролика mq, похоже, что он изменил конфигурацию или порт для подключения к серверу кролика на моей машине. Поэтому я снова установил кролик mq. Вы помогаете мне в этой душевности? – Loint
плагин управления ui работает на другом порту. Порт по умолчанию - 15672. Чтобы включить этот плагин, вы должны ssh на сервер mpb mq и введите: * rabbitmq-plugins enable rabbitmq_management * –
Я могу запустить web ui, но я не могу подключить кролика из исходного кода (не любое изменение) 'amqp.connect (" amqp: // localhost ", fuction());' – Loint