2012-08-16 6 views
3

RabbitMQ 서버에서 node.js amqp-node 클라이언트를 실행 중입니다. 두 가지 방법으로 간단한 게시/소비 테스트를 설정했습니다. 각각 다른 지연 시간이 생겨서 왜 작동하지 못합니다. 대기 시간은 메시지가 전송 된 시간부터 배달 된 시간까지 측정됩니다.생산자와 소비자 사이의 RabbitMQ 메시지 대기 시간

첫 번째 방법은 퍼블리싱 앱과 소모 앱의 두 가지 프로세스를 사용합니다. 약 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); 
} 

답변

2

첫 번째 방법에서는 RabbitMQ 서버에 두 개의 독립적 인 연결이 있습니다. 두 번째 방법에서는 생산자 (보낸 사람)와 소비자 (받는 사람)가 동일한 연결을 공유합니다. 당연히 localhost RabbitMQ 서버를 사용하면 초당 2의 메시지 속도가 매우 낮아 모든 네트워킹 지연을 줄일 수 있지만 RabbitMQ 또는 node.js amqp 구현이 발신자와 수신자가 동일한 연결에서 멀티플렉싱되는 경우 속도가 느려질 수 있습니다.

건배!