Брокер сообщений. Состоит сервера, клиентской библиотеки и есть еще коннектор
Для подключения нового узла в кластер, достаточно ему указать адрес любого другого узла этого кластера, он получит всю топологию и определит живые/мертвые узлы.
Сообщения группируются по темам и каждый узел знает какие узлы имеют живых подписчиков и на какие темы.
Все сообщения в кластере доставляются напрямую от отправителя получателю, без промежуточных шагов. 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», параметризовано вроде
Указываются порты для хоста и для кластера отдельно и оба работают, видимо и подключения отличаются
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»
Тот же конфиг, добавляем только одну группу и в параметры запуска тоже добавить- «-js –cluster_name nats-js»
(...) jetstream { store_dir="K:/PF/Nats/data/jetstream" } (...)
Все предельно просто, есть несколько вариантов: какой то менеджер пакетов «choco», интерпретатор go, и скачать дистрибутив
В последнем случае скачиваем, утилитой «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 [=<service name>]
nats cheat ############################################# Сохранение параметров в контекст ############################################# nats context save sys --user sys --password pass nats context select <name-context> 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