你好,我有一个关于带有amqplib的Rabbitmq的问题
我有重试连接的逻辑,但是我的问题是关于连接的。
在尝试建立连接之前,我会先进行验证(如果已经有一个开放的连接),但是我怀疑这样做的正确方法:
public start = async () => {
if (this.connection || !this.rabbitUrl) return;
this.connection = await retry<Connection>(
() => connect(this.rabbitUrl),
10,
1000
).then((connection) => {
Logger.info('connect to RabbitMQ success');
return this.listeners();
});
};
我的听众:
private listeners = (): Promise<Connection> => {
return new Promise((resolve, reject) => {
if (!this.connection) {
this.rabbitUrl ? this.start() : reject();
reject();
}
resolve(
this.connection.on('error', (err: Error) => {
Logger.info(err.message);
sleep(this.start, 10000);
}) &&
this.connection.on('close', (err: Error) => {
if (err) {
Logger.info('connection closed because err!');
sleep(this.start, 10000);
}
Logger.info('connection to RabbitQM closed!');
})
);
});
};
如果没有连接,我只是使用return,我怀疑正确的连接是否会引发错误,通知已存在连接,还是仅返回记录器才是正确的连接? 就性能而言,这两种方法中哪一种是正确的,并且不会影响流程?