From 1b87cd2fdff8f93ed0097034c90c6e1b2346b929 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sun, 4 Oct 2026 02:27:36 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B1=D0=B5=D1=81=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D0=B5=D1=87=D0=BD=D0=BE=D0=B5=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20NATS=20=D0=B8=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D1=80=D1=8B=D0=B2=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit max_reconnect_attempts=-1 (D-6), колбэки disconnected/reconnected/closed, options типизирован как dict[str, Any]. Co-Authored-By: Claude Fable 5.1 --- api/src/app.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/api/src/app.py b/api/src/app.py index d994ecd..9d0922e 100644 --- a/api/src/app.py +++ b/api/src/app.py @@ -8,6 +8,7 @@ middleware (gzip, proxy headers), healthcheck, обработчики исклю import base64 from contextlib import asynccontextmanager from datetime import UTC, datetime +from typing import Any import nkeys from fastapi import FastAPI @@ -34,7 +35,23 @@ setup_logger(level="DEBUG" if settings.DEBUG else "INFO") async def _connect_nats() -> NATS | None: """Подключение к NATS (core, без JetStream); при ошибке — ``None``, приложение всё равно стартует.""" nats_settings = settings.OPENBAO.NATS - options: dict = {"max_reconnect_attempts": 2} + + async def disconnected_cb() -> None: + logger.warning("NATS: соединение потеряно") + + async def reconnected_cb() -> None: + logger.info("NATS: соединение восстановлено") + + async def closed_cb() -> None: + logger.warning("NATS: соединение закрыто") + + # -1 — бесконечное автопереподключение (D-6): иначе клиент закрывается навсегда после короткого сбоя NATS + options: dict[str, Any] = { + "max_reconnect_attempts": -1, + "disconnected_cb": disconnected_cb, + "reconnected_cb": reconnected_cb, + "closed_cb": closed_cb, + } if nats_settings.NATS_SEED and nats_settings.NATS_JWT: kp = nkeys.from_seed(nats_settings.NATS_SEED.encode("utf-8"))