【问题标题】:RabbitMQ message latency between producer and consumer生产者和消费者之间的 RabbitMQ 消息延迟
【发布时间】:2012-08-16 00:14:26
【问题描述】:

我在 RabbitMQ 服务器上运行 node.js amqp-node 客户端。我以两种不同的方式设置了一个简单的发布/消费测试——每种方式都会产生不同的延迟,我不知道为什么。延迟时间是从消息发送到传递的时间。

第一种方法使用两个独立的进程 - 一个用于发布应用程序 - 一个用于消费应用程序。它产生大约 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);
}

【问题讨论】:

    标签: node.js messaging rabbitmq amqp node-amqp


    【解决方案1】:

    在第一种方法中,您有两个到 RabbitMQ 服务器的独立连接,而在第二种方法中,您为生产者(发送者)和消费者(接收者)共享相同的连接。诚然,考虑到本地主机 RabbitMQ 服务器,您每秒 2 条的消息速率非常低,因此我们可以忽略任何网络延迟,但我怀疑当发送者和接收者在同一连接上多路复用时,RabbitMQ 或 node.js amqp 实现会减慢速度。

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 2012-01-28
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      相关资源
      最近更新 更多