Как проверить, живо ли соединение в библиотеке RabbitMq node-amqplib?

Я пишу для продюсера и потребителя, используя библиотеку rabbitMq node-amqplib, я боюсь внезапно потерять соединение с сервером. Как я могу проверить, живо ли соединение или нет?

2 ответа

Решение

AMQP 0-9-1 предлагает функцию сердцебиения, чтобы гарантировать, что прикладной уровень оперативно узнает о разорванных соединениях (а также о полностью не отвечающих одноранговых узлах).

В amqplib вам нужно только установить время ожидания пульса (не 0), когда вы звоните connect([url, [socketOptions]]) и проверка будет выполнена автоматически.

Больше информации здесь:

https://www.squaremobius.net/amqp.node/channel_api.html

http://www.rabbitmq.com/heartbeats.html

Есть несколько вариантов сделать это:

Один из способов — использовать сердцебиение и прослушиватель событий, что-то вродеconn.on('close', (err) => { this.connected = false; } )

Или вы можете попасть в объект подключения. Здесь есть риск, так как обновления до amqplib могут сломать это, так как это не часть официального интерфейса:const connClosed = conn.connection['expectSocketClose']

Внутри объекта подключения есть другие свойства, которые также могут сообщить вам, закрыто ли оно, например, состояние записи потока (может быть ложным флагом) или объект сердцебиения.

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