====== NATS ====== ===== Общие сведения ===== Брокер сообщений. Состоит сервера, клиентской библиотеки и есть еще коннектор\\ Для подключения **нового узла в кластер**, достаточно ему указать адрес любого другого узла этого кластера, он получит всю топологию и определит живые/мертвые узлы.\\ Сообщения **группируются по темам** и каждый узел знает какие узлы имеют живых подписчиков и на какие темы.\\ Все сообщения в кластере **доставляются напрямую** от отправителя получателю, без промежуточных шагов. Nats не записывает сообщения на диск\\ Клиенты знают **всю топологию кластера**, поэтому способны сами переподключаться при потери связи\\ Работает на порту "**4222**"\\ **NATS & NATS Streaming**\\ NATS реализует **базовую модель** "публикации/подписки" в то время как **Streaming** предоставляет более **расширенные варианты**.\\ **NATS Streaming** устаревшее, работало через другой exe, актуальная реализация это **JetStream**, является надстройкой и встроено в тот же ехе, достаточно запустить с аргументом "-js"\\ **Авторизация** поддерживается как по логину/паролю так и по токену. Есть настройка разрешений подписки/публикации\\ Для **настройки кластера** нужно добавить параметры в файл конфигурации каждого хоста, к каждому можно настроить метод аутентификации\\
:!: Образец конфигурации cluster { host: '0.0.0.0' port: 7248 routes = [ nats-route://192.168.59.103:7244 nats-route://192.168.59.103:7246 ] }
**Мониторинг** Для мониторинга предусмотрен аргумент запуска **"-m your_port"**, очень простая, для более расширенного варианта есть утилита **"nats-top"**\\ При активном соединении работает "Ping/Pong", параметризовано вроде\\ ===== Конфигурация ===== Указываются порты для хоста и для кластера отдельно и оба работают, видимо и подключения отличаются\\
:!: Пример конфигурации c tls и кластером debug: true trace: false log_file: "c:/path/logs/name.log" http_port: 8222 # HTTP monitoring port port: 4222 tls { cert_file: "c:/path/name.crt" key_file: "c:/path/name.key" ca_file: "c:/path/rootCA.crt" } cluster { listen: 0.0.0.0:5222 routes = [ nats-route://ip-1:5222 nats-route://ip-2:5222 ] tls { cert_file: "c:/path/name.crt" key_file: "c:/path/name.key" ca_file: "c:/path/rootCA.crt" } }
**Базовый функционал**\\ Обеспечивает высокую эффективность (но согласованность не гарантируется)\\ Полезно для данных не критичных к своевременности и согласованности\\
:!: Пример конфигурации # Client port port: 4222 # HTTP monitoring port monitor_port: 4223 # Пользователь authorization { users = [ {пользователь: << имя пользователя1>>, пароль: << пароль1>>} ] timeout: 1 } # This is for clustering multiple servers together. cluster { # Интерфейс кластера port: 4224 # Аутентификация кластерной ссылки authorization { пользователь: << имя пользователя2>> пароль: << пароль2>> timeout: 0.75 } # Информация о кластере routes = [ nats-route:// << имя пользователя 2 >>: << пароль 2 >> @ nats-1: 4224 nats-route:// << имя пользователя 2 >>: << пароль 2 >> @ nats-2: 4224 ] }
**Потоковая передача**\\ Обеспечивает гарантию согласованности. Методы типа ACK и "гарантия минимум одного прохода" помогают в этом\\ Вроде как можно развернуть на основе обычного кластера, из примера выше\\ Исполняемый файл уже содержит в себе данный функционал, для запуска используется аргумент "-js"\\
:!: Потоковая передача - JetStream Тот же конфиг, добавляем только одну группу и в параметры запуска тоже добавить- "-js --cluster_name nats-js" (...) jetstream { store_dir="K:/PF/Nats/data/jetstream" } (...)
===== Установка ===== ==== Windows ==== Все предельно просто, есть несколько вариантов: какой то менеджер пакетов "choco", интерпретатор go, и скачать дистрибутив\\ В последнем случае [[https://github.com/nats-io/nats-server/releases/tag/v2.9.3|скачиваем]], утилитой "sc" назначаем службой, параметры запуска/конфиги это уже все здесь и опционально\\ Используя флаги можно запускать на одном хосте несколько экземпляров, после запуска службой можно управлять аргументом "--signal"\\ sc.exe create nats-server binPath="c:\nats\nats-server.exe --config=c:\nats\app.conf" sc.exe start nats-server # REM Reload server configuration (сигналы под вопросом) nats-server.exe --signal reload # REM Stop the server nats-server.exe --signal stop [=]
:!: CheatSheet nats cheat ############################################# Сохранение параметров в контекст ############################################# nats context save sys --user sys --password pass nats context select nats --tlsca=./certs/rootCA.crt --server=162.55.230.171 stream ls nats --tlsca=./certs/rootCA.crt --server=162.55.230.171 stream add brain_activity_protobuf --config ./stream_configs/brain_activity_protobuf.json ############################################# Системная учетка ############################################# добавить в конфиг accounts: { $SYS: { users: [{user: sys, password: pass}] } } затем в cli: nats --context sys --user sys --password pass server list ################################# Удаление хоста из метаданных ################################# nats server cluster peer-remove RztkeQup ******************************************************************* Названия стримов brain.activity.protobuf (альтернатива Ice_AccountsActivity, только на protobuf) brain.control.protobuf (альтернатива Ice_MesControl2ServerApp, только на protobuf). nats --tlsca=./certs/rootCA.crt --server=162.55.230.171 stream add brain_activity_protobuf --config ./stream_configs/brain_activity_protobuf.json nats --tlsca=./certs/rootCA.crt --server=162.55.230.171 --user sys --password pass stream ls nats --tlsca=./certs/rootCA.crt --server=162.55.230.171 stream rm brain_activity_protobuf -f nats --tlsca=./certs/rootCA.crt --server=162.55.230.171 stream add brain_activity_protobuf --config ./stream_configs/brain_activity_protobuf.json nats --tlsca=./certs/rootCA.crt --server=162.55.230.171 stream add brain_control_protobuf --config ./stream_configs/brain_control_protobuf.json nats --context sys stream ls nats-cli.exe --tlsca=./certs/rootCA.crt --server=168.119.10.29 stream ls nats-cli.exe --tlsca=./certs/rootCA.crt --server=135.181.6.30 stream ls
===== ===== ==== ==== ==== ====