P1-9: readiness-проба /ready отражает состояние bridge/consumer

/health остаётся liveness (процесс жив); /ready возвращает 503, если bridge или
consumer не в строю (горутина упала/не поднялась). Добавлен api.Readiness с
atomic-флагами, NewRouter принимает *Readiness, main поднимает/опускает флаги
вокруг фоновых горутин.
This commit is contained in:
Repinoid
2026-10-07 07:25:09 +03:00
parent f19ab47c29
commit 3036572ccc
4 changed files with 59 additions and 6 deletions
+7 -1
View File
@@ -89,7 +89,9 @@ func main() {
}
// HTTP API — в основном потоке.
router := api.NewRouter(h, log, cfg.AuthTestMode, cfg.JwtHMACSecret, version)
// Readiness: /ready отдаёт 503, пока bridge/consumer не подняты.
ready := &api.Readiness{}
router := api.NewRouter(h, log, cfg.AuthTestMode, cfg.JwtHMACSecret, version, ready)
server := &http.Server{
Addr: ":" + cfg.APIPort,
Handler: router,
@@ -102,6 +104,8 @@ func main() {
go func() {
defer wg.Done()
ready.SetBridge(true)
defer ready.SetBridge(false)
if err := bridge.Run(ctx, cfg, sqsClient, log); err != nil && !errors.Is(err, context.Canceled) {
log.Error("bridge stopped", "err", err)
}
@@ -109,6 +113,8 @@ func main() {
go func() {
defer wg.Done()
ready.SetConsumer(true)
defer ready.SetConsumer(false)
if err := consumer.Run(ctx, cfg, sqsClient, iotStore, log); err != nil && !errors.Is(err, context.Canceled) {
log.Error("consumer stopped", "err", err)
}