Проверка готовности в Nest
Контейнер уже запущен, но база или кэш ещё недоступны, и трафик на API будет падать с ошибками. Балансировщику нужен отдельный сигнал, можно ли слать запросы на этот экземпляр.
Проверка готовности
(readiness probe, зонд готовности)
смотрит на зависимости или
ресурс процесса. В @nestjs/terminus
для этого передают в сводку
индикаторы, например
MemoryHealthIndicator
с порогом кучи, как в документации
фреймворка, когда отдельной базы
в примере нет.
Покажем на примере постов:
import { Controller, Get } from '@nestjs/common';
import {
HealthCheck,
HealthCheckService,
MemoryHealthIndicator,
} from '@nestjs/terminus';
@Controller('health')
export class HealthController {
constructor(
private health: HealthCheckService,
private memory: MemoryHealthIndicator,
) {}
@Get('live')
@HealthCheck()
live() {
return this.health.check([]);
}
@Get('ready')
@HealthCheck()
ready() {
return this.health.check([
() =>
this.memory.checkHeap(
'memory_heap',
150 * 1024 * 1024,
),
]);
}
}
Модуль проверок уже импортирует
TerminusModule и контроллер:
import { Module } from '@nestjs/common';
import { TerminusModule } from '@nestjs/terminus';
import { HealthController } from './health.controller.js';
@Module({
imports: [TerminusModule],
controllers: [HealthController],
})
export class HealthModule {}
Добавьте в HealthController
адрес готовности из пакета проверок
и подключите HealthModule
к приложению работников.