NATS: вынести subject'ы в настройки (OpenBao) #80

Closed
opened 2026-10-08 22:56:54 +03:00 by aep · 2 comments
Owner

Зачем

Сейчас subject'ы NATS зашиты константами в api/src/contract/subjects.py трёх сервисов (решение R-4 в #74): files.tabular_uploaded, files.img_uploaded, files.tabular_parsed. Имена выдаёт платформа вместе с правами в JWT NATS, и уже раз менялись (recognition.* → files.*, 08.10.2026). При следующей смене понадобится релиз трёх сервисов. Платформа передаёт в под только переменные OPENBAO__*, поэтому настройка должна читаться оттуда.

Что сделать

  • Три настройки в Settings arm-core, tabular-parser, scan-gateway: subject запроса tabular, subject запроса image, subject ответа. Умолчания — текущие files.*.
  • Решить, в какой группе OpenBao они живут: рядом с OPENBAO__NATS__{NATS_URL, NATS_SEED, NATS_JWT} (их выдаёт платформа вместе с правами JWT) или как OPENBAO__APP__<ИМЯ> (settings_sources.py, одинаковый в трёх репо).
  • request_subject(pipeline) и подписки берут имена из настроек; константы остаются только как умолчания.
  • Контракт (docs/context/03-architecture.md, спеки recognition-contract, recognition-job-exchange, tabular-recognition-service, image-recognition-gateway): subject'ы — конфигурация окружения, имена по умолчанию и требование, что у всех трёх сервисов они совпадают.
  • .env.example трёх сервисов, docs/dev/README.md (раздел про OpenBao и NATS).

Связано

  • OQ-83 — интеграционные тесты делят subject'ы с контейнерами стенда; настраиваемые имена позволят тестам брать свой префикс (сейчас make e2e требует останавливать ядро стенда).
  • Риск: разъехавшиеся настройки у ядра и сервиса = тишина на шине (ядро уйдёт в dlq по NO_ACK). Стоит логировать subject'ы при старте (уже есть в «Подписка NATS активна») и показать их в /healthcheck.
  • Ссылки: #74 (design nats-files-subjects, R-4), follow-up #79.

🤖 Generated with Claude Code

## Зачем Сейчас subject'ы NATS зашиты константами в `api/src/contract/subjects.py` трёх сервисов (решение R-4 в #74): `files.tabular_uploaded`, `files.img_uploaded`, `files.tabular_parsed`. Имена выдаёт платформа вместе с правами в JWT NATS, и уже раз менялись (`recognition.*` → `files.*`, 08.10.2026). При следующей смене понадобится релиз трёх сервисов. Платформа передаёт в под только переменные `OPENBAO__*`, поэтому настройка должна читаться оттуда. ## Что сделать - Три настройки в `Settings` arm-core, tabular-parser, scan-gateway: subject запроса `tabular`, subject запроса `image`, subject ответа. Умолчания — текущие `files.*`. - Решить, в какой группе OpenBao они живут: рядом с `OPENBAO__NATS__{NATS_URL, NATS_SEED, NATS_JWT}` (их выдаёт платформа вместе с правами JWT) или как `OPENBAO__APP__<ИМЯ>` (`settings_sources.py`, одинаковый в трёх репо). - `request_subject(pipeline)` и подписки берут имена из настроек; константы остаются только как умолчания. - Контракт (`docs/context/03-architecture.md`, спеки `recognition-contract`, `recognition-job-exchange`, `tabular-recognition-service`, `image-recognition-gateway`): subject'ы — конфигурация окружения, имена по умолчанию и требование, что у всех трёх сервисов они совпадают. - `.env.example` трёх сервисов, `docs/dev/README.md` (раздел про OpenBao и NATS). ## Связано - **OQ-83** — интеграционные тесты делят subject'ы с контейнерами стенда; настраиваемые имена позволят тестам брать свой префикс (сейчас `make e2e` требует останавливать ядро стенда). - Риск: разъехавшиеся настройки у ядра и сервиса = тишина на шине (ядро уйдёт в `dlq` по `NO_ACK`). Стоит логировать subject'ы при старте (уже есть в «Подписка NATS активна») и показать их в `/healthcheck`. - Ссылки: #74 (design `nats-files-subjects`, R-4), follow-up #79. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Owner

Решение владельца 12.10.2026: subject'ы и JWT задаются по окружению (прод/тест — разные наборы) через секреты OpenBao. Группа — OPENBAO__NATS__ (как FileWorker в контуре), ключи NATS_TABULAR_REQUEST_SUBJECT, NATS_IMAGE_REQUEST_SUBJECT, NATS_RESULT_SUBJECT, одинаковые в трёх сервисах; NATS_JWT/NATS_SEED → SecretStr. Задачи сервисов: RSHB/arm-core#106, RSHB/arm-tabular-parser#31, RSHB/arm-scan-gateway#32.

Решение владельца 12.10.2026: subject'ы и JWT задаются по окружению (прод/тест — разные наборы) через секреты OpenBao. Группа — `OPENBAO__NATS__` (как FileWorker в контуре), ключи `NATS_TABULAR_REQUEST_SUBJECT`, `NATS_IMAGE_REQUEST_SUBJECT`, `NATS_RESULT_SUBJECT`, одинаковые в трёх сервисах; `NATS_JWT`/`NATS_SEED` → SecretStr. Задачи сервисов: RSHB/arm-core#106, RSHB/arm-tabular-parser#31, RSHB/arm-scan-gateway#32.
aep closed this issue 2026-10-13 12:55:28 +03:00
Author
Owner

Сделано PR #99 (merge c6bfbdd): subject'ы OPENBAO__NATS__NATS_TABULAR_REQUEST_SUBJECT, NATS_IMAGE_REQUEST_SUBJECT, NATS_RESULT_SUBJECT и NATS_JWT/NATS_SEED (SecretStr) — секреты окружения; /healthcheck.subjects. Архив OpenSpec — PR #100. Отложенное — в follow-up issue RSHB/arm-ka-docs (Follow-ups from #80).

Сделано PR #99 (merge c6bfbdd): subject'ы `OPENBAO__NATS__NATS_TABULAR_REQUEST_SUBJECT`, `NATS_IMAGE_REQUEST_SUBJECT`, `NATS_RESULT_SUBJECT` и `NATS_JWT`/`NATS_SEED` (`SecretStr`) — секреты окружения; `/healthcheck.subjects`. Архив OpenSpec — PR #100. Отложенное — в follow-up issue RSHB/arm-ka-docs (Follow-ups from #80).
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-ka-docs#80
No description provided.