app.connectMicroservice({
transport: Transport.REDIS,
options: {
url: redis://ip:6379,
retryAttempts: 5,
retryDelay: 5000,
}
});
这就是我连接到Nestjs中的微服务的方式,在Windows中是简单而基本的。
在此过程中,与redis的连接可能会消失,但我无法抓住它。
这意味着该应用将仍然有效,并且如果恢复Redis连接将不会发生任何事情,我将无法订阅新事件。
如何处理它或添加超时或捕获此类问题。
目前的解决方法是仅手动重新启动服务。在这种情况下,我想使用exit(1)
终止该进程
答案 0 :(得分:1)
您可以定期发出运行状况检查消息,然后在连接关闭时开始恢复过程:
在模块的导入中注册您的redis客户端:
imports: [ClientsModule.register([
{ name: 'REDIS_CLIENT', transport: Transport.REDIS },
])],
然后,在您的onModuleInit中,连接您的客户端并定期启动健康检查:
constructor(@Inject('REDIS_CLIENT') private readonly client: ClientProxy) {
}
async onModuleInit() {
await this.client.connect();
setInterval(async () => {
try {
await this.client.emit('healthcheck', 'healthcheck').toPromise();
} catch (e) {
// Sending the message has failed, start recovery
console.error(e);
process.exit(1);
}
}, 1000);
}