Настройка времени ожидания сокета при подключении 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.