странно низкая производительность отправки сообщений в очередь с amqplib? - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь проверить задержку Rabbitmq с помощью amqp.node (https://github.com/squaremo/amqp.node).

Это потребитель:

import amqp from 'amqplib';

amqp.connect('amqp://localhost').then((connection) => {
  connection.createChannel().then((channel) => {
    const queue = 'test1';
    channel.assertQueue(queue, { durable: false }).then(()=>{
      var consumedMessages = 0;
      channel.consume(queue, (msg) => {
        const timestamp = new Date().getTime();
        consumedMessages++;
        if (msg != null) console.log(`consumed ${consumedMessages}: ${timestamp - Number(msg.content.toString())}`);
      }, { noAck: true });
    });
  }).catch((error) => { throw error; });
}).catch((error) => { throw error; });

А это производитель:

import amqp from 'amqplib';

amqp.connect('amqp://localhost').then((connection) => {
  connection.createChannel().then((channel) => {
    const queue = 'test1';
    const totalMessages = 3;

    channel.assertQueue(queue, { durable: false }).then(()=>{    
      for(var n = 0; n < totalMessages; n++){
        channel.sendToQueue(queue, Buffer.from(new Date().getTime().toString()));
      }
      setTimeout(()=>{
        connection.close();
        process.exit(0);
      }, 1000);
    });
  }).catch((error) => { throw error; });
}).catch((error) => { throw error; });

Затем я ослабил 3 экземпляра потребителя:

for ((i=1;i<=3;i+=1)); do node dist/consumer.js & done

А 3 производителя:

for ((i=1;i<=3;i+=1)); do node dist/producer.js & done

и я получаю:

consumed 1: 8
consumed 1: 6
consumed 1: 10
consumed 2: 42
consumed 2: 43
consumed 3: 42
consumed 2: 42
consumed 3: 42
consumed 3: 42

Первое сообщение каждого производителя имеет низкую задержку, а остальные нет.

Что я могу сделать, чтобы улучшить это?

1 Ответ

1 голос
/ 03 июня 2019

Попробуйте amqp.connect('amqp://localhost', { noDelay: true }), возможно, нужен конфиг rabbitmq-server. Деталь по алгоритму Rabbitmq Nagle .

...