Я пытаюсь реализовать механизм повторного подключения при сбое подключения к серверу очереди rabbitmq. Этот код предназначен только для приема сообщений. Ниже приведен мой код (функция инициализации канала заботится об инициализации потребителя и привязке к очереди).
connect() {
let conn = amqp.connect(queueConfig.QUEUE_SERVER_URL + "?heartbeat=60");
return conn;
}
createConnection(){
console.info("Trying to connect amqp");
let self = this;
self.connection = this.connect()
.then(function(connection){
console.info("[AMQP] connected");
connection.on("error",function(err){
if (err.message !== "Connection closing") {
console.error("[AMQP] conn error", err.message);
}
});
connection.on("close", function() {
console.error("[AMQP] reconnecting");
return setTimeout(createConnection, 1000);
});
return connection.createConfirmChannel();
})
.then(self.channelInit);
}
При сбое подключения я успешно получаю приглашение «[AMQP] reconnecting», но после этого очередь не восстанавливается, никакие другие запросы не поступают в журнал консоли.
Пожалуйста помоги.
Я просто изменил эту опечатку и попробовал, но все равно не работает.
Попробуйте это: return setTimeout(self.createConnection, 1000);
У вас опечатка в вашем методе. Вам нужно использовать что-то вроде setTimeout(createConnection, 1000);
вместо вашего setTimeout(createConnection(), 1000);
Спасибо за ответы. Я просто попробовал внести предложенное вами изменение, но все еще не работает.
Мммммм ... setTimeout(createConnection,1000)
в setTimeout(createConnection.bind(self),1000)
есть идеи о том, где я могу ввести код для повторной инициализации каналов и повторной привязки очереди?
Должен быть
return setTimeout(createConnection, 1000);