我正在使用rabbitMq node-amqplib库编写生产者和消费者,我担心突然丢失服务器连接,怎样才能检查连接是否存活?
我正在使用rabbitMq node-amqplib库编写生产者和消费者,我担心突然丢失服务器连接,怎样才能检查连接是否存活?
AMQP 0-9-1提供了一个心跳功能,以确保应用程序层及时发现中断的连接(以及完全无响应的对等方)。
在amqplib中,当您调用connect([url, [socketOptions]])
时,只需要设置一个心跳超时时间(非0),检查将自动执行。
更多信息请参见此处:
https://www.squaremobius.net/amqp.node/channel_api.html#heartbeating
有几种方法可以做到这一点:
一种方法是使用心跳和事件监听器,类似于
conn.on('close', (err) => { this.connected = false; } )
或者你可以进入连接对象。这里存在风险,因为升级到amqplib可能会破坏它,因为它不是官方接口的一部分:
const connClosed = conn.connection['expectSocketClose']
连接对象中还有其他属性,也可以告诉您它是否关闭,例如流可写状态(可能是错误标志)或心跳对象。