Настройка времени ожидания сокета при подключении amqplib

Я использую кластер из 2 серверов RabbitMQ (может быть любым числом), и я реализовал отработку отказа, когда мое приложение зацикливает список RabbitMQ и пытается восстановить соединение при разрыве соединения.

Если экземпляр RabbitMQ не работает, к которому я пытаюсь подключиться, потребуется около 60 секунд для тайм-аута перед тем, как перейти к следующему, что является очень долгим временем. Есть ли способ настроить тайм-аут или какой-то другой способ сделать его быстрее. Это вызывает ненужное длительное время простоя. Сердцебиение обеспечивает обнаружение сбоя в существующем соединении, но проблема заключается в первоначальной попытке соединения.

Вот мой код, используемый для подключения:

connect(callback) {
    const self = this;

    amqp.connect(rabbitInstances[rabbitInstance] + "?heartbeat=10").then(conn => {
        conn.on("error", function(err) {
            setTimeout(() => self.reconnect(callback), 5000));
            return;
        });

        conn.on("close", function() {
            setTimeout(() => self.reconnect(callback), 5000));
            return;
        });

        connection = conn;
        whenConnected(callback);
    })
    .catch(err => {
        setTimeout(() => self.reconnect(callback), 5000));
    });
}

reconnect(callback) {
    this.rabbitInstance === (rabbitInstances.length - 1) ? this.rabbitInstance = 0 : this.rabbitInstance++;
    this.connect(callback)
}

0 ответов

Я прочитал исходный код для amqplib и увидел второй аргумент connectпринимает объект, содержащий обычные параметры сокета. Я использовал это, чтобы установить и проверить 2-секундный тайм-аут следующим образом:

const amqp = require('amqplib');

const connection = await amqp.connect('amqp://localhost', {
  timeout: 2000,
  servername: 'localhost',
});

Я использую версию 0.5.3 из amqplib. URL-адрес Github находится здесь: https://github.com/squaremo/amqp.node.

Другие вопросы по тегам