Повторно подключитесь к RabbitMQ с помощью amqplib после перезапуска RabbitMQ

#node.js #rabbitmq #amqp #node-amqplib

Вопрос:

У меня есть этот код подключения rabbitmq, с помощью которого я подключился к очереди и использую его.

 const amqp = require('amqplib');

class RabbitMq {
    constructor(connStr) {
      this.connStr = connStr;
      this.conn = null;
      this.channel = null;
      this.queues = {};
      this.isConnecting = false;
  }
async connect() {
    if (this.conn) return;
    this.conn = await amqp.connect(this.connStr);
  }

async getChannel() {
    if (this.channel) return this.channel;
    if (!this.conn) await this.connect();
    this.channel = await this.conn.createChannel();
    return this.channel;
  }

async sendToQueue(queue, message) {
    if (!this.channel) await this.getChannel();
    return this.channel.sendToQueue(
        queue,
        Buffer.from(JSON.stringify(message))
    );
  }

async consume(queue, handler) {
    if (!this.conn) await this.connect();
    if (!this.channel) await this.getChannel();
    await this.channel.assertQueue(queue);
    this.channel.prefetch(1);
    this.channel.consume(queue, handler);
  }

async assertQueue(queue) {
    if (!this.channel) await this.getChannel();
    await this.channel.assertQueue(queue);
  }

async ack(message) {
    if (!this.channel) await this.getChannel();
    this.channel.ack(message);
  }
}

// handle SIGTERM, SIGINT
module.exports = new RabbitMq(process.env.CLOUDAMQP_URL);
 

Теперь это работает нормально, но как только я выполню эту команду на терминале,

brew services restart rabbitmq

что в основном означает перезапуск RabbitMQ, я получаю эту ошибку сердцебиения, а затем я просто не могу снова подключиться к RabbitMQ. Это продолжается и дальше. Я также попытался включить функцию try catch в connect() функцию, но ее там не поймали. Ошибка, которую я получаю, такова:

 Error: Heartbeat timeout
at Heart.<anonymous> (/Users/..../node_modules/amqplib/lib/connection.js:427:19)
at Heart.emit (events.js:315:20)
at Heart.runHeartbeat (/Users/..../node_modules/amqplib/lib/heartbeat.js:88:17)
at listOnTimeout (internal/timers.js:549:17)
at processTimers (internal/timers.js:492:7)
 

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