我在RabbitMQ服务器上运行node.js amqp-node客户端。我以两种不同的方式设置了一个简单的发布/消费测试 - 每种方式产生不同的延迟,我无法解决原因。延迟是从发送消息到发送消息的时间来衡量的。
第一种方法使用两个单独的进程 - 一个用于发布应用程序 - 一个用于使用应用程序。它产生大约4ms的延迟。第二种方法只使用一个应用程序来生成和使用。这产生大约40ms的延迟。任何人都可以向我解释这种行为为什么?谢谢你的时间。
方法#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);
}
答案 0 :(得分:2)
在第一种方法中,您有两个与RabbitMQ服务器的独立连接,其中与第二种方法一样,您为生产者(发送者)和消费者(接收者)共享相同的连接。不可否认,鉴于本地主机RabbitMQ服务器,您的每秒2的消息速率非常低,因此我们可以减少任何网络延迟,但我怀疑当发送器和接收器在同一连接上多路复用时,RabbitMQ或node.js amqp实现会减慢速度。< / p>
干杯!