我正在运行一个由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)
}发布于 2019-08-22 16:15:54
我阅读了amqplib的源代码,并看到了connect的第二个参数接受一个包含普通套接字选项的对象。我使用它来强制和验证2秒超时,如下所示:
const amqp = require('amqplib');
const connection = await amqp.connect('amqp://localhost', {
timeout: 2000,
servername: 'localhost',
});我使用的是amqplib的0.5.3版本。Github在这里:https://github.com/squaremo/amqp.node。
https://stackoverflow.com/questions/43996051
复制相似问题