IVA ДОКУМЕНТАЦИЯ ОБНОВЛЕНИЯ

Установка и настройка внешнего сервера NATS

Требования к параметрам внешнего сервера NATS

Перед установкой внешнего сервера NATS необходимо проверить серверное оборудование на соответствие следующим требованиям:

Параметр Требование

Процессор

не менее 4 ядер

Оперативная память

не менее 8 ГБ

Жесткий диск

не менее 8 ГБ

Указанные требования к параметрам внешнего сервера NATS:

  • не учитывают установку дополнительного ПО

  • не учитывают нагрузку на сервер, получаемую в результате функционирования дополнительного ПО

  • подходят для одного внешнего сервера NATS, обрабатывающего до 10000 сообщений в секунду, что соответствует в общей сумме до 100000 зарегистрированных пользователей всех федеративных серверов Платформы IVA MCU

Минимальные требования к параметрам внешнего сервера NATS приведены согласно официальной документации NATS

Установка внешнего сервера NATS

Установить внешний сервер NATS можно следующими способами:

Установка внешнего сервера NATS по документации NATS и его настройка

Чтобы установить внешний сервер NATS, необходимо выполнить действия согласно официальной документации NATS.

Для упрощения взаимодействия, тестирования и управления внешним сервером NATS рекомендуется использовать инструменты командной строки NATS согласно официальной документации NATS.

Чтобы внешний сервер NATS работал в фоновом режиме, необходимо запустить его как сервис или как контейнер Docker

Требования к настройке внешнего сервера NATS, установленного по официальной документации NATS:

  1. включить JetStream

  2. создать и настроить стрим с именем federation и темой federation.events.>:

    • без ограничения максимального размера сообщения (Maximum Message Size)

    • без ограничения максимального количества сообщений (Max Messages)

    • с общим лимитом хранилища стрима (Stream Storage Limit) в 1 ГБ

    • для политики удержания данных (Retention Policy) указать limits

    • для политики отбрасывания (Discard Policy) выбрать значение old

  3. указать максимальный размер полезной нагрузки для всего внешнего сервера NATS Max Payload Size — 4194304 байт

Рекомендации к настройке внешнего сервера NATS, установленного по официальной документации NATS:

  1. в явном виде указать директорию для логирования, иначе лог-файлы будут записываться в syslog (если он настроен)

  2. если в качестве места хранения данных подсистемы JetStream выбран диск, то явно указать путь к месту хранения данных, иначе папка с данными будет создана в /tmp/

  3. ограничить размер используемой оперативной памяти и жесткого диска

  4. настроить firewall (см. открытие соответствующих сетевых портов)

  5. настроить TLS для безопасного соединения

Сертификаты для Платформы IVA MCU (клиент NATS) и внешнего сервера NATS должны быть подписаны одним корневым сертификатом. Сертификаты и ключи должны быть выпущены в формате .pem

Установка внешнего сервера NATS с помощью скрипта

Установка и настройка внешнего сервера NATS возможна с помощью скрипта, который можно скачать с официального файлового хранилища компании IVA Technologies. Скрипт устанавливает один сервер NATS, настраивает его как службу, а также устанавливает инструменты командной строки NATS.

Скрипт не предусматривает настройку кластера и федерации серверов NATS

Сервер перед установкой NATS должен быть подготовлен и соответствовать требованиям:

  1. установлена ОС Debian / Astra Linux 1.7 / Astra Linux 1.8

  2. установлены sudo и wget

  3. у сервера должен быть выход в Интернет на момент запуска и работы скрипта

  4. настроен firewall (см. открытие соответствующих сетевых портов)

    Скрипт во время установки и настройки сервера NATS указывает порт 4222 TCP для подключения клиентов

Чтобы установить сервер NATS с помощью скрипта, необходимо:

  1. на сервере от имени администратора запустить скрипт командой:

    sudo bash setup_nats_server_v1.34.sh
  2. в ходе установки задать значения лимита памяти JetStream и лимита файлового хранилища JetStream

    Пример вывода:

    [2026-03-30 19:11:06] Введите значения для JetStream (например: 2G, 3G)...
    max_mem (лимит памяти JetStream) [2G]:
    max_file (лимит файлового хранилища JetStream) [3G]:
  3. после завершения установки и настройки скрипт выводит информацию:

    • где находятся лог-файл и конфигурационный файл

    • формирует сертификаты и ключ для настройки полей Keystore брокера сообщений и Truststore брокера сообщений в Платформе IVA MCU

      Пример вывода:

      ИНФОРМАЦИЯ О РАЗМЕЩЕНИИ:
      - Лог-файл:        /var/log/nats/nats-server.log
      - Сертификаты:     /etc/nats/certs/
      - Порт NATS:       4222
      - Конфигурация:   /etc/nats/nats-server.conf
      
      ФАЙЛЫ TRUSTSTORE И KEYSTORE (PEM в каталоге скрипта):
      - Truststore:      /root/truststore.txt (содержимое CA)
      - Keystore:        /root/keystore.txt (CA + клиентский сертификат + ключ)

Проверки внешнего сервера NATS и интеграции с Платформой IVA MCU

Проверки работы внешнего сервера NATS и интеграции с Платформой IVA MCU необходимо выполнять после настройки серверов федерации.

Проверки на стороне Платформы IVA MCU

Проверка статуса синхронизации серверов федерации

Чтобы проверить статус синхронизации серверов федерации Платформ IVA MCU, необходимо:
Войти в веб-панель администрированияПерейти в раздел Федеративные связиВыбрать домен и нажать кнопку Федеративные связиВыбрать удаленный сервер федерацииСтатус синхронизацииУбедиться, что статус Успешно

Статус синхронизации серверов федерации

Если статус синхронизации серверов федерации Неудача, то необходимо:

  1. перезапустить синхронизацию:
    Войти в веб-панель администрированияПерейти в раздел Федеративные связиВыбрать домен и нажать кнопку Федеративные связиВыбрать удаленный сервер федерацииНажать кнопку Синхронизировать

  2. перейти в веб-панель администрирования удаленного головного сервера федерации, скачать dump-файл и проверить лог-файл ivcs-server.log на наличие ошибок:

Ошибка №1

2026-03-13 12:28:44,394 [long-timed-operations-pool-thread-0] ERROR (FederationDomainService) - NATS response timeout (30000ms) error for sync domain request

Ошибка №2

2026-03-13 12:27:08,990 [default-task-service-thread-3] ERROR (ServerBus) - Message processing failed
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
    at nl.altindag.ssl.util.KeyStoreUtils.createIdentityStore(KeyStoreUtils.java:146)
    at nl.altindag.ssl.util.KeyStoreUtils.createIdentityStore(KeyStoreUtils.java:130)
    at nl.altindag.ssl.SSLFactory$Builder.withIdentityMaterial(SSLFactory.java:530)
    at nl.altindag.ssl.SSLFactory$Builder.withIdentityMaterial(SSLFactory.java:526)
    at su.ivcs.nats.business.NATSConnectorServiceBase.initTlsIfNeeded(NATSConnectorServiceBase.java:746)
    at su.ivcs.nats.business.NATSConnectorServiceBase.start(NATSConnectorServiceBase.java:907)
    at su.ivcs.nats.business.NATSServiceImpl.onSettingsChanged(NATSServiceImpl.java:227)
    at su.ivcs.media.model.event.SystemSettingsChangeServerEvent.dispatch(SystemSettingsChangeServerEvent.java:48)
    at su.ivcs.media.model.event.SystemSettingsChangeServerEvent.dispatch(SystemSettingsChangeServerEvent.java:9)
    at su.ivcs.messagebus.server.ServerBus$1.doInTransactionWithoutResult(ServerBus.java:92)
    at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:36)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
    at su.ivcs.messagebus.server.ServerBus.notifyListener(ServerBus.java:87)
    at su.ivcs.messagebus.server.ServerBus.notifyListeners(ServerBus.java:113)
    at su.ivcs.messagebus.server.ServerBus$SendMessagesTask.run(ServerBus.java:200)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:840)

Ошибка №3

2026-03-13 12:32:48,325 [pool-1204-thread-1] ERROR (SystemNATSConnectorService) - Exception occurred while working with NATS. NATS="DiskStorage"
java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
...
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Ошибка №4

2026-03-13 12:44:41,207 [default-task-service-thread-3] ERROR (SystemNATSConnectorService) - NATS connection error. NATS="DiskStorage"
java.io.IOException: Unable to connect to NATS servers: [nats://10.0.206.205:4222]
at io.nats.client.impl.NatsConnection.connectImpl(NatsConnection.java:264)
at io.nats.client.impl.NatsConnection.connect(NatsConnection.java:183)
at io.nats.client.impl.NatsImpl.createConnection(NatsImpl.java:29)
at io.nats.client.Nats.createConnection(Nats.java:352)
at io.nats.client.Nats.connect(Nats.java:250)
at su.ivcs.nats.business.NATSConnectorServiceBase.lambda$connect$7(NATSConnectorServiceBase.java:384)
at su.ivcs.nats.business.NatsServiceStateMachine.runCommandIfAtGivenStatus(NatsServiceStateMachine.java:149)
at su.ivcs.nats.business.NATSConnectorServiceBase.connect(NATSConnectorServiceBase.java:380)
at su.ivcs.services.i.scheduling.ScheduledTaskServiceImpl$2.doInTransactionWithoutResult(ScheduledTaskServiceImpl.java:157)
at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:36)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at su.ivcs.services.i.scheduling.ScheduledTaskServiceImpl.lambda$schedule$1(ScheduledTaskServiceImpl.java:152)
at su.ivcs.services.i.scheduling.ScheduledTaskServiceImpl.lambda$callWrapper$4(ScheduledTaskServiceImpl.java:341)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)

Ошибка №5

2026-03-13 13:03:53,634 [pool-1325-thread-1] ERROR (SystemNATSConnectorService) - Exception occurred while working with NATS. NATS="DiskStorage"
java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: Cannot produce CertificateVerify signature
...
Caused by: javax.net.ssl.SSLHandshakeException: Cannot produce CertificateVerify signature
...
Caused by: java.security.SignatureException: Could not sign data
at java.base/sun.security.rsa.RSAPSSSignature.engineSign(RSAPSSSignature.java:436)
at java.base/java.security.Signature$Delegate.engineSign(Signature.java:1423)
at java.base/java.security.Signature.sign(Signature.java:712)
at java.base/sun.security.ssl.CertificateVerify$T13CertificateVerifyMessage.<init>(CertificateVerify.java:937)
... 21 common frames omitted
Caused by: javax.crypto.BadPaddingException: RSA private key operation failed
at java.base/sun.security.rsa.RSACore.crtCrypt(RSACore.java:209)
at java.base/sun.security.rsa.RSACore.rsa(RSACore.java:130)
at java.base/sun.security.rsa.RSAPSSSignature.engineSign(RSAPSSSignature.java:433)
... 24 common frames omitted

Ошибка №6

2026-03-13 12:59:30,330 [default-task-service-thread-1] ERROR (ServerBus) - Message processing failed
nl.altindag.ssl.pem.exception.PrivateKeyParseException: Received an unsupported private key type
at nl.altindag.ssl.pem.util.PemUtils.lambda$parsePrivateKey$11(PemUtils.java:494)
at java.base/java.util.Optional.orElseThrow(Optional.java:403)
at nl.altindag.ssl.pem.util.PemUtils.parsePrivateKey(PemUtils.java:494)
at nl.altindag.ssl.pem.util.PemUtils.parsePrivateKey(PemUtils.java:479)
at su.ivcs.nats.business.NATSConnectorServiceBase.initTlsIfNeeded(NATSConnectorServiceBase.java:745)
at su.ivcs.nats.business.NATSConnectorServiceBase.start(NATSConnectorServiceBase.java:907)
at su.ivcs.nats.business.NATSServiceImpl.onSettingsChanged(NATSServiceImpl.java:227)
at su.ivcs.media.model.event.SystemSettingsChangeServerEvent.dispatch(SystemSettingsChangeServerEvent.java:48)
at su.ivcs.media.model.event.SystemSettingsChangeServerEvent.dispatch(SystemSettingsChangeServerEvent.java:9)
at su.ivcs.messagebus.server.ServerBus$1.doInTransactionWithoutResult(ServerBus.java:92)
at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:36)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at su.ivcs.messagebus.server.ServerBus.notifyListener(ServerBus.java:87)
at su.ivcs.messagebus.server.ServerBus.notifyListeners(ServerBus.java:113)
at su.ivcs.messagebus.server.ServerBus$SendMessagesTask.run(ServerBus.java:200)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)

Решение

Все перечисленные ошибки чаще всего возникают из-за некорректно указанных сертификатов и ключей в системных настройках NATS Платформы IVA MCU в полях Keystore брокера сообщений и Truststore брокера сообщений.

Необходимо проверить, что:

  1. в поле Truststore брокера сообщений указан корневой сертификат сервера NATS, которым подписаны сертификаты для клиента и сервера NATS

  2. в поле Keystore брокера сообщений содержится объединенное значение двух сертификатов (корневой сертификат, который также прописан в поле Truststore брокера сообщений, сертификат клиента) и ключа от сертификата клиента

  3. сертификаты для сервера NATS и клиента должны быть подписаны одним корневым сертификатом

При некорректно заполненных полях Truststore брокера сообщений и Keystore брокера сообщений Платформы в лог-файлах сервера NATS будут присутствовать записи об ошибке TLS handshake.

Примеры лог-файла внешнего сервера NATS с ошибкой:

[1346] 2026/03/13 12:45:37.267061 [ERR] 10.0.200.34:57134 - cid:43 - TLS handshake error: tls: failed to verify certificate: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "NATS-CA") (CN=nats-client SHA-256: 6d4dd73e35305823ecb45b76e5c472f267018148eb50cf59a5b984579dee0c92; CN=NATS-CA SHA-256: a6249b5c4108bf2a1b6904f1b9d160dedcc7bafdcaeec97021b9616da17f757d)

или

[1346] 2026/03/13 12:37:12.506478 [ERR] 10.0.200.34:60222 - cid:33 - TLS handshake error: remote error: tls: unknown certificate

Если в лог-файле ivcs-server.log содержится ошибка 2 и в логах сервера NATS нет ошибок, то вероятно в системных настройках NATS в поле Keystore брокера сообщений не указан корневой сертификат.

В случае возникновения ошибки 4 также стоит проверить открыт ли порт сервера NATS, по которому головной сервер Платформы IVA MCU должен выполнять подключение

Проверка функционирования федерации

Администраторов головных серверов федерации, созданных по умолчанию при установке систем, нельзя добавлять в мероприятия в качестве федеративных участников.
Проверку функционирования федерации рекомендуется проводить с участием вновь созданных пользователей

Чтобы проверить функционирование федерации, необходимо:

  1. создать новое мероприятие на сервере 1 федерации, пригласив в него пользователя из сервера 2 федерации

  2. убедиться, что у пользователя из сервера 2 федерации в списке мероприятий отображается созданное мероприятие

  3. если мероприятие не отображается, то необходимо скачать dump-файлы с каждого головного сервера федерации и проверить лог-файлы ivcs-server.log на наличие ошибок:

Ошибка

Описание

2026-03-11 14:13:55,347 [default-task-service-thread-2] WARN  (SystemNATSConnectorService) - No stream available for the subject:iva.diskstorage.file.status. Bypass subscription. NATS="DiskStorage"

Ошибка возникает в случае, если на внешнем сервере NATS не создан стрим с именем federation и темой federation.events.>.

Чтобы устранить ошибку, необходимо:

  1. на внешнем сервере NATS создать стрим с именем federation и темой federation.events.> с учетом требуемых настроек

  2. перезагрузить ivcs-server.service на каждом головном сервере федерации командой:

    sudo systemctl restart ivcs-server.service

Проверки работы внешнего сервера NATS

Все проверки работы внешнего сервера NATS необходимо выполнять в консоли управления сервера NATS.

Если был настроен TLS, то к каждой команде необходимо добавлять:

--server <nats-server> --tlscert <path_client_cert>   --tlskey <path_client_key>   --tlsca <path_ca_cert>,

где:
<nats-server> — адрес внешнего сервера NATS, например nats://nats-server-test.local:4222 или nats://127.0.0.1:4222

<path_client_cert> — путь до места хранения клиентского сертификата (путь в скрипте по установке внешнего сервера NATS /etc/nats/certs/client-cert.pem)

<path_client_key> — путь до места хранения клиентского ключа (путь в скрипте по установке внешнего сервера NATS /etc/nats/certs/client-key.pem)

<path_ca_cert> — путь до корневого сертификата (путь в скрипте по установке внешнего сервера NATS /etc/nats/certs/ca-cert.pem)

Проверка активности JetStream

Чтобы проверить успешность запуска JetStream, необходимо:

  1. открыть лог-файл nats-server.log внешнего сервера NATS (путь в скрипте по установке внешнего сервера NATS /var/log/nats/nats-server.log)

  2. найти секцию JetStream и убедиться, что отсутствует запись JetStream Shutdown, что подтвердит успешность запуска JetStream

Пример вывода:

[1991] 2026/03/13 17:54:07.892567 [INF] Starting nats-server
[1991] 2026/03/13 17:54:07.893033 [INF]   Version:  2.12.5
[1991] 2026/03/13 17:54:07.893037 [INF]   Git:      [0f6c831]
[1991] 2026/03/13 17:54:07.893039 [INF]   Name:     nats-js-node-1
[1991] 2026/03/13 17:54:07.893042 [INF]   Node:     el50GUtN
[1991] 2026/03/13 17:54:07.893043 [INF]   ID:       NCRZTMELDLORFCEDYE3WD7YOSQJGEPXS24AXAD5LHIZHYZCBPP7AE7TJ
[1991] 2026/03/13 17:54:07.893049 [INF] Using configuration file: /etc/nats/nats-server.conf (sha256:b0dde763f63b579615c5219db34f5d537fedea87a8a1cd7f920082fc00cb6158)
[1991] 2026/03/13 17:54:07.893966 [INF] Starting http monitor on 0.0.0.0:8222
[1991] 2026/03/13 17:54:07.894080 [INF] Starting JetStream
[1991] 2026/03/13 17:54:07.894163 [INF]     _ ___ _____ ___ _____ ___ ___   _   __  __
[1991] 2026/03/13 17:54:07.894166 [INF]  _ | | __|_   _/ __|_   _| _ \ __| /_\ |  \/  |
[1991] 2026/03/13 17:54:07.894167 [INF] | || | _|  | | \__ \ | | |   / _| / _ \| |\/| |
[1991] 2026/03/13 17:54:07.894169 [INF]  \__/|___| |_| |___/ |_| |_|_\___/_/ \_\_|  |_|
[1991] 2026/03/13 17:54:07.894170 [INF]
[1991] 2026/03/13 17:54:07.894172 [INF]          https://docs.nats.io/jetstream
[1991] 2026/03/13 17:54:07.894174 [INF]
[1991] 2026/03/13 17:54:07.894175 [INF] ---------------- JETSTREAM ----------------
[1991] 2026/03/13 17:54:07.894177 [INF]   Strict:          true
[1991] 2026/03/13 17:54:07.894186 [INF]   Max Memory:      1.86 GB
[1991] 2026/03/13 17:54:07.894194 [INF]   Max Storage:     2.79 GB
[1991] 2026/03/13 17:54:07.894196 [INF]   Store Directory: "/var/lib/nats/jetstream"
[1991] 2026/03/13 17:54:07.894200 [INF]   API Level:       3
[1991] 2026/03/13 17:54:07.894202 [INF] -------------------------------------------
[1991] 2026/03/13 17:54:07.894387 [INF] Took 302.476µs to start JetStream
[1991] 2026/03/13 17:54:07.894432 [INF] Listening for client connections on 0.0.0.0:4222
[1991] 2026/03/13 17:54:07.894549 [INF] Server is ready

Проверка приема и передачи сообщений брокером сообщений

Для проверки приема и передачи сообщений брокером сообщений необходимо:

  1. в терминальном окне 1 выполнить команду:

    sudo nats pub "someSubject" "Some message"

    Пример вывода:

    19:59:51 Published 12 bytes to "someSubject"
  2. в терминальном окне 2 подписаться на ранее указанную тему someSubject командой:

    sudo nats sub "someSubject"

    Пример вывода:

    20:11:10 Subscribing on someSubject
  3. в терминальном окне 1 отправить сообщение по указанной теме someSubject командой:

    sudo nats pub "someSubject" "Some message"
  4. убедиться, что в терминальном окне 2 отобразится информация о новом сообщении:

    [#1] Received on "someSubject" Some message
  5. если в терминальном окне 2 сообщение не отобразилось, то это означает, что внешний сервер NATS настроен некорректно. Необходимо скачать лог-файл внешнего сервера NATS для изучения проблемы. При необходимости включить расширенное логирование debug и / или трассировку trace

Проверка наличия стрима federation

Чтобы убедиться в наличии стрима federation, необходимо выполнить команду:

sudo nats stream ls

Пример вывода команды:

╭────────────────────────────────────────────────────────────────────────────────────╮
│                                       Streams                                      │
├────────────┬─────────────┬─────────────────────┬──────────┬─────────┬──────────────┤
│ Name       │ Description │ Created             │ Messages │ Size    │ Last Message │
├────────────┼─────────────┼─────────────────────┼──────────┼─────────┼──────────────┤
│ federation │             │ 2026-03-06 19:07:26 │ 163      │ 366 KiB │ 1h22m45s     │
╰────────────┴─────────────┴─────────────────────┴──────────┴─────────┴──────────────╯

Если в выводе команды нет стрима с именем federation, то его необходимо создать.

Проверка настроенных параметров стрима federation

Для проверки настроенных параметров стрима federation необходимо выполнить команду:

sudo nats stream info federation

Пример вывода команды:

Information for Stream federation created 2026-03-13 18:21:43

                Subjects: federation.events.>
                Replicas: 1
                 Storage: File

Options:

               Retention: Limits
         Acknowledgments: true
          Discard Policy: Old
        Duplicate Window: 2m0s
              Direct Get: true
    Allows Batch Publish: false
         Allows Counters: false
       Allows Msg Delete: true
  Allows Per-Message TTL: false
            Allows Purge: true
        Allows Schedules: false
          Allows Rollups: false

Limits:

        Maximum Messages: unlimited
     Maximum Per Subject: unlimited
           Maximum Bytes: 1.0 GiB
             Maximum Age: unlimited
    Maximum Message Size: unlimited
       Maximum Consumers: unlimited

State:

            Host Version: 2.12.5
      Required API Level: 0 hosted at level 3
                Messages: 4
                   Bytes: 10 KiB
          First Sequence: 1 @ 2026-03-13 18:34:58
           Last Sequence: 4 @ 2026-03-13 18:35:54
        Active Consumers: 2
      Number of Subjects: 2

Убедиться в правильности настроек параметров стрима federation:

  1. в строке Subjects должна быть указана тема federation.events.>. Если это не так, то необходимо пересоздать стрим с правильной темой

    Удалить неверно созданный стрим можно командой:

    sudo nats stream delete <stream_name>

    где <stream_name> — имя стрима, в данном случае federation

  2. в строке Active Consumers после выполнения настроек на стороне Платформы IVA MCU должно быть указано столько подписчиков, сколько головных серверов Платформы входит в состав федерации. Если это не так, то необходимо перезапустить службу ivcs-server.service на каждом головном сервере федерации. В случае, если перезапуск службы ivcs-server.service не разрешил проблему, необходимо изучить лог-файл ivcs-server.log на каждом головном сервере федерации, а также лог-файл внешнего сервера NATS

Параметры стрима должны соответствовать настройкам. Если настройки не соблюдены, то необходимо внести изменения в стрим командой:

nats stream edit <stream_name>

где <stream_name> — имя стрима, в данном случае federation

Проверка наличия сообщений для темы стрима

После попытки создания мероприятия с федеративным пользователем в Платформе IVA MCU можно проверить наличие сообщений в теме federation.events.> стрима federation с помощью команды:

sudo nats stream view federation

Пример вывода:

[10] Subject: federation.events.vjXe96Ccjcs16lDILxdhwu/OQ1pJMSUSOIXaRJfWzSA13GFoJiaAhmGvq4/Qu3eq Received: 2026-03-10 09:21:52
{"fromCompanyID":"MCU_YQVIK5pL8e00+lgjg6RT0IakUBFjXYjoT0arZYEv7D1WUWTU+ZVCBdf6ruf1fgHc_ivcs.su@80","toCompanyID":"MCU_vjXe96Ccjcs16lDILxdhwu/OQ1pJMSUSOIXaRJfWzSA13GFoJiaAhmGvq4/Qu3eq_ivcs.su@80","type":"federation.conference.participant.update","payload":"{\"conferenceId\":\"f959c76d-7429-4318-9761-6cd4a9f271f9\",\"conferenceSessionId\":\"48216e9d-f057-42e3-8847-628b770a5d37\",\"participant\":{\"profileId\":\"28b5a323-05d4-4064-9f4f-811d7edf9fbe\",\"conferenceSessionParticipantId\":\"a973e65f-cec6-4286-acc8-b677d0693415\",\"name\":\"Mobile user3\",\"email\":\"mobileuser3@testivcs.su\",\"isRegistered\":false,\"isLocal\":false,\"inviteResponseType\":\"APPROVE\",\"settings\":{\"role\":\"MODERATOR\",\"dialAtStart\":false,\"informBySms\":false,\"interpreterLanguagesPair\":[],\"customPermissions\":[]}},\"domainId\":\"6a310898-e3a7-4562-9b6b-995b7f9fff17\",\"domainHost\":\"dev-stand-06.hi-tech.org\",\"eventId\":\"dd113da2-1a22-456c-b5f8-647f465e06f0\",\"eventDate\":1773123711982,\"eventType\":\"FEDERATION_CONFERENCE_PARTICIPANT_UPDATE\"}","serviceKey":"MCU","eventId":"b7321d5d-0b67-4b94-8600-7783c2172dbe","eventDate":1773123711984,"eventType":"FEDERATION_EVENT_WRAPPED","jsSubject":"federation.events.vjXe96Ccjcs16lDILxdhwu/OQ1pJMSUSOIXaRJfWzSA13GFoJiaAhmGvq4/Qu3eq"}

Если вывод пустой, то необходимо проверить:

При необходимости, на стороне внешнего сервера NATS можно включить расширенное логирование debug и трассировку trace.

Проверка наличия подписчиков стрима

После выполнения настроек на стороне Платформы IVA MCU можно проверить наличие подписчиков стрима с помощью команды:

sudo nats consumer list federation

Пример вывода:

╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                         Consumers                                                                         │
├───────────────────────────────────────────────────────────────────────────┬─────────────┬─────────────────────┬─────────────┬─────────────┬───────────────┤
│ Name                                                                      │ Description │ Created             │ Ack Pending │ Unprocessed │ Last Delivery │
├───────────────────────────────────────────────────────────────────────────┼─────────────┼─────────────────────┼─────────────┼─────────────┼───────────────┤
│ federationDURABLE_CONSUMER_FEDERATION7b43303e-5b4d-4bec-9a94-786bda34ffd5 │             │ 2026-03-30 14:13:37 │           0 │           0 │ 1d1h29m42s    │
│ federationDURABLE_CONSUMER_FEDERATIONb0aca8c7-c172-4ad9-8f19-894b181b9252 │             │ 2026-03-28 08:09:01 │           0 │           0 │ 1h40m8s       │
╰───────────────────────────────────────────────────────────────────────────┴─────────────┴─────────────────────┴─────────────┴─────────────┴───────────────╯

Если подписчиков нет, то необходимо проверить:

При необходимости, на стороне внешнего сервера NATS можно включить расширенное логирование debug и трассировку trace.

По подписчику можно получить дополнительную информацию командой:

sudo nats consumer info federation <consumer_name>

где <consumer_name> — имя подписчика, например, federationDURABLE_CONSUMER_FEDERATION7b43303e-5b4d-4bec-9a94-786bda34ffd5

Пример вывода:

Information for Consumer federation > federationDURABLE_CONSUMER_FEDERATION0fdafe06-25ab-4f01-acfb-9efaf881ef32 created 2026-03-27 13:50:55

Configuration:

                    Name: federationDURABLE_CONSUMER_FEDERATION0fdafe06-25ab-4f01-acfb-9efaf881ef32
        Delivery Subject: _INBOX.dMce6bSqHVMIs4e8gGqjyc
          Filter Subject: federation.events.MgSurYS4BNBby+feFn+M7clW5Lt7Gr+gyhk+mexeMa2ZjtZ/Lv+0JyeigDNQ8Pz7
          Deliver Policy: New
     Deliver Queue Group: IVAMCU_CLIENT_QUEUE_federation_MgSurYS4BNBby+feFn+M7clW5Lt7Gr+gyhk+mexeMa2ZjtZ/Lv+0JyeigDNQ8Pz7
              Ack Policy: Explicit
                Ack Wait: 1.00s
           Replay Policy: Instant
      Maximum Deliveries: 10,240
         Max Ack Pending: 1
            Flow Control: false
                 Backoff: 1s, 5s, 10s

State:

            Host Version: 2.12.5
      Required API Level: 0 hosted at level 3
  Last Delivered Message: Consumer sequence: 175 Stream sequence: 3,466 Last delivery: 1h46m27s ago
    Acknowledgment Floor: Consumer sequence: 175 Stream sequence: 3,466 Last Ack: 1h46m27s ago
        Outstanding Acks: 0 out of maximum 1
    Redelivered Messages: 0
    Unprocessed Messages: 0
         Active Interest: Active using Queue Group IVAMCU_CLIENT_QUEUE_federation_MgSurYS4BNBby+feFn+M7clW5Lt7Gr+gyhk+mexeMa2ZjtZ/Lv+0JyeigDNQ8Pz7