gpt4 book ai didi

node.js - 在 amqplib 连接上配置套接字超时

转载 作者:太空宇宙 更新时间:2023-11-03 21:54:46 27 4
gpt4 key购买 nike

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

最佳答案

我阅读了amqplib的源代码,并看到connect的第二个参数接受一个包含普通套接字选项的对象。我用它来强制并验证 2 秒超时,如下所示:

const amqp = require('amqplib');

const connection = await amqp.connect('amqp://localhost', {
timeout: 2000,
servername: 'localhost',
});

我使用的是 amqplib 0.5.3 版本。 Github URL 在这里:https://github.com/squaremo/amqp.node .

关于node.js - 在 amqplib 连接上配置套接字超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43996051/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com