Убить процесс nestjs - node.js, потеряв соединение с redis (микросервис) - PullRequest
1 голос
/ 21 мая 2019
app.connectMicroservice({
  transport: Transport.REDIS,
  options: {
    url: redis://ip:6379,
    retryAttempts: 5,
    retryDelay: 5000,
  }
});

Вот так я подключаюсь к микросервису в nestjs, простой и простой в Windows.

Во время этого процесса соединение с redis может исчезнуть, но я не могу его поймать.

Это означает, что приложение будет все еще живым, и ничего не произойдет, если соединение Redis будет восстановлено, я не смогу подписаться на новые события.

Как я могу обработать это или добавить таймаут или перехватвопрос, как это.Исправление пока только перезапускает службу вручную.Я хочу убить процесс с exit(1) в этом случае

1 Ответ

1 голос
/ 21 мая 2019

Вы можете периодически отправлять сообщения проверки работоспособности, а затем запускать процесс восстановления при закрытии соединения:

Зарегистрируйте ваш клиент 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);
}
...