我正在运行一个由 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)
}