Я запускаю клиент node.js amqp-node на сервере RabbitMQ. Я настроил простой тест публикации / потребления двумя разными способами - каждый дает разную задержку, и я не могу понять, почему. Задержка измеряется с момента отправки сообщения до момента его доставки.
Первый метод использует два отдельных процесса: один для публикующего приложения, а второй - для приложения-потребителя. Это дает задержку около 4 мс. Второй метод использует только одно приложение для производства и потребления. Это дает задержку около 40 мс. Может ли кто-нибудь объяснить мне такое поведение, почему? Спасибо за уделенное время.
Метод №1 Производитель:
var amqp = require('amqp'),
connection = amqp.createConnection({host:'localhost'}),
testExchange = {};
connection.on('ready', function(){
testExchange = connection.exchange('testExchange', {type:'topic', autoDelete:true});
testMessage();
});
function testMessage(){
console.log('message sent');
testExchange.publish('test.message', { msg:'testMessage', time: new Date().getTime() });
setTimeout(testMessage, 500);
}
Метод №1 для потребителей
var amqp = require('amqp'),
connection = amqp.createConnection({host:'localhost'}),
connection.on('ready', function(){
var testExchange = connection.exchange('testExchange', {type:'topic', autoDelete:true});
var testQ = connection.queue('testQ', function(queue){
queue.bind('testExchange', 'test.#');
queue.subscribe( function(message){
console.log('message received');
var now = new Date().getTime();
console.log(now-message.time);
});
});
});
Метод № 2: производитель и потребитель
var amqp = require('amqp'),
connection = amqp.createConnection({host:'localhost'}),
testExchange = {};
connection.on('ready', function(){
testExchange = connection.exchange('testExchange', {type:'topic', autoDelete:true});
var testQ = connection.queue('testQ', function(queue){
queue.bind('testExchange', 'test.#');
queue.subscribe( function(message){
console.log('message received');
var now = new Date().getTime();
console.log(now-message.time);
});
testMessage();
});
});
function testMessage(){
console.log('message sent');
testExchange.publish('test.message', { msg:'testMessage', time: new Date().getTime() });
setTimeout(testMessage, 500);
}