杀死Nestjs-失去Redis连接的Node.js进程(MicroService)

时间:2019-05-21 16:40:02

标签: javascript node.js typescript redis nestjs

app.connectMicroservice({
  transport: Transport.REDIS,
  options: {
    url: redis://ip:6379,
    retryAttempts: 5,
    retryDelay: 5000,
  }
});

这就是我连接到Nestjs中的微服务的方式,在Windows中是简单而基本的。

在此过程中,与redis的连接可能会消失,但我无法抓住它。

这意味着该应用将仍然有效,并且如果恢复Redis连接将不会发生任何事情,我将无法订阅新事件。

如何处理它或添加超时或捕获此类问题。 目前的解决方法是仅手动重新启动服务。在这种情况下,我想使用exit(1)终止该进程

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);
}