4.1 KiB
ADDED Requirements
Requirement: Subject'ы и учётные данные NATS из настроек окружения
Ядро SHALL брать subject'ы обмена из OPENBAO__NATS__NATS_TABULAR_REQUEST_SUBJECT, NATS_IMAGE_REQUEST_SUBJECT,
NATS_RESULT_SUBJECT (умолчания files.tabular_uploaded, files.img_uploaded, files.tabular_parsed): публикует запросы в tabular_request и image_request, подписан на result (queue group arm-core).
При старте SHALL проверяться все три имени (непустое, без пробельных символов, без * и >, без пустых токенов,
попарно различны); при нарушении приложение MUST NOT стартовать. Значения NATS_JWT и NATS_SEED MUST NOT попадать в
логи, repr настроек и тексты ошибок валидации. Используемые subject'ы SHALL писаться в лог при старте и отдаваться в
/healthcheck объектом subjects с ключами tabular_request, image_request, result при любом значении nats (ok | down | off).
Scenario: Умолчания
- WHEN приложение стартует без ключей
OPENBAO__NATS__NATS_*_SUBJECT - THEN
/healthcheck.subjectsсодержит именаfiles.*по умолчанию, обмен идёт по ним
Scenario: Subject'ы окружения
- WHEN заданы
OPENBAO__NATS__NATS_TABULAR_REQUEST_SUBJECT=test.files.tabular_uploaded,OPENBAO__NATS__NATS_IMAGE_REQUEST_SUBJECT=test.files.img_uploaded,OPENBAO__NATS__NATS_RESULT_SUBJECT=test.files.tabular_parsed - THEN подписки и публикации идут только по этим subject'ам,
/healthcheck.subjectsих показывает
Scenario: Недопустимый subject
- WHEN
OPENBAO__NATS__NATS_RESULT_SUBJECTсовпадает с subject'ом запроса или содержит> - THEN приложение не стартует, ошибка называет ключ
Scenario: JWT не раскрывается
- WHEN заданы
NATS_JWTиNATS_SEED, а валидация настроек падает на другом поле - THEN текст ошибки и лог не содержат значений JWT и seed;
reprнастроек показывает их скрытыми
MODIFIED Requirements
Requirement: Соединение с NATS по шаблону, без JetStream
Ядро SHALL подключаться к NATS с nkeys-seed и JWT, если заданы OPENBAO__NATS__NATS_SEED/NATS_JWT, и без учётных данных,
если они пусты; подписываться на subject ответа NATS_RESULT_SUBJECT (по умолчанию files.tabular_parsed) в queue group arm-core; переподключаться автоматически.
Stream'ы и consumer'ы JetStream MUST NOT требоваться. Фоновые задачи SHALL запускаться при NATS_ENABLED=true.
Scenario: Dev-окружение compose
- WHEN ядро стартует с
DEBUG=true,NATS_ENABLED=trueи пустыми учётными данными против NATS без JetStream - THEN подписка активна,
/healthcheckотдаётnats = ok, в логах нет ошибок подключения
Scenario: Два инстанса ядра
- WHEN запущены два инстанса с
NATS_ENABLED=trueи опубликован один результат - THEN результат обработан ровно одним инстансом (queue group), строка задания изменена один раз
Scenario: NATS выключен
- WHEN
NATS_ENABLED=false - THEN приложение стартует, фоновые задачи не запускаются,
/healthcheckотвечает 200 сnats = off