RabbitMQサーバーでnode.jsamqp-nodeクライアントを実行しています。私は2つの異なる方法で単純な公開/消費テストを設定しました-それぞれが異なるレイテンシーを生成し、その理由を理解できません。待ち時間は、メッセージが送信されてから配信されるまでの時間で測定されます。
最初の方法では、2つの別々のプロセスを使用します。1つは公開アプリ用、もう1つは消費アプリ用です。約4msのレイテンシーを生成します。2番目の方法では、1つのアプリのみを使用して作成および消費します。これにより、約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);
}