3

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);
}
4

1 に答える 1

2

最初の方法では、RabbitMQサーバーへの2つの独立した接続がありますが、2番目の方法と同様に、プロデューサー(送信者)とコンシューマー(受信者)で同じ接続を共有しています。確かに、ローカルホストのRabbitMQサーバーを考えると、1秒あたり2のメッセージレートはかなり低いため、ネットワークの遅延を無視できますが、RabbitMQまたはnode.js amqpの実装では、送信者と受信者が同じ接続で多重化されていると処理が遅くなると思われます。

乾杯!

于 2012-08-17T08:08:24.367 に答える