В этой статье разберем, как установить NATS на разных платформах, настроить его под реальные задачи и начать работать с публикацией и получением сообщений.
Что такое NATS
NATS ― это система обмена сообщениями для распределенных приложений. Она помогает сервисам и микросервисам передавать данные друг другу быстро и без лишней нагрузки. В основе лежит модель publish/subscribe: один сервис отправляет сообщение в определенную тему, а другие подписываются на нее и получают данные.
Проект появился как легкая и быстрая альтернатива более тяжелым брокерам сообщений. Его часто используют в инфраструктуре с микросервисами, контейнерами и Kubernetes, где важны скорость реакции и простота масштабирования. NATS написан на Go, легко запускается и не требует сложной настройки.
Сообщения в NATS передаются через сервер или кластер серверов. Клиенты подключаются к нему по TCP и могут публиковать сообщения, подписываться на темы или работать в режиме запрос-ответ. Есть поддержка очередей подписчиков, когда несколько сервисов обрабатывают одну и ту же тему, распределяя нагрузку между собой.
Основные концепции NATS
Чтобы разобраться, как работает NATS и из каких элементов строится взаимодействие между сервисами, важно понимать его базовые понятия:
- Сообщение ― минимальная единица передачи данных. Содержит полезную нагрузку и отправляется в определенную тему.
- Тема (subject) ― строка, по которой маршрутизируются сообщения. Структура темы может быть иерархической, что позволяет гибко управлять подписками.
- Издатель (publisher) ― сервис или клиент, который отправляет сообщение в тему.
- Подписчик (subscriber) ― сервис или клиент, который подписывается на тему и получает сообщения.
- Модель публикация―подписка (pub/sub) ― способ взаимодействия, при котором отправитель не знает, кто именно получит сообщение.
- Режим запрос-ответ (request-reply) ― формат взаимодействия, в котором один сервис отправляет запрос и ожидает конкретный ответ.
- Группа очереди (queue group) ― механизм распределения нагрузки между несколькими подписчиками одной темы. Сообщение получает только один участник группы.
- Сервер NATS ― компонент, который принимает подключения клиентов и маршрутизирует сообщения.
- JetStream ― это встроенное расширение NATS, которое добавляет сохранение сообщений и гарантии доставки. В базовом режиме NATS передает сообщения без хранения: если подписчик недоступен, сообщение теряется. JetStream решает эту задачу ― он сохраняет сообщения на диск или в память, позволяет подтверждать получение, повторно доставлять данные и управлять потоками сообщений.

Установка NATS на Linux
1. Обновите список пакетов и установленные компоненты системы:
Debian/Ubuntu:
|
1 2 |
sudo apt update sudo apt upgrade -y |
CentOS/AlmaLinux/Rocky Linux:
|
1 |
sudo dnf update -y |
2. Откройте страницу релизов nats-server на GitHub и выберите архив под вашу архитектуру (например, Linux AMD64). Подставьте актуальную версию вместо X.Y.Z.
3. Скачайте архив:
|
1 |
curl -L https://github.com/nats-io/nats-server/releases/download/vX.Y.Z/nats-server-vX.Y.Z-linux-amd64.tar.gz -o nats-server.tar.gz |
4. Распакуйте архив:
|
1 |
tar -xvzf nats-server.tar.gz |
5. Скопируйте бинарный файл в каталог, который входит в переменную PATH:
|
1 |
sudo cp nats-server-vX.Y.Z-linux-amd64/nats-server /usr/local/bin/nats-server |
6. Проверьте установленную версию:
|
1 |
nats-server -v |
7. Запустите сервер вручную, чтобы убедиться, что он работает. По умолчанию используется порт 4222:
|
1 |
nats-server |
Остановить можно сочетанием Ctrl + C.

Установка NATS на Windows
1. Откройте PowerShell.
2. Установите Scoop, если он еще не установлен:
|
1 2 |
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser irm get.scoop.sh | iex |
Scoop ― это менеджер пакетов для Windows. Он автоматически скачивает программы, настраивает переменные окружения и добавляет исполняемые файлы в PATH. Без него пришлось бы вручную искать архив с nats-server, распаковывать его и прописывать путь к бинарному файлу. Через Scoop установка занимает одну команду и упрощает обновления в будущем.
3. Установите NATS Server:
|
1 |
scoop install main/nats-server |
Команда скачает последнюю доступную версию и сделает nats-server доступным из любой директории.
4. Проверьте установку:
|
1 |
nats-server -v |
Если версия отображается, сервер установлен корректно.
5. Запустите NATS:
|
1 |
nats-server |
По умолчанию сервер слушает порт 4222. Остановить его можно сочетанием Ctrl + C.

Настройка NATS
1. Создайте конфигурационный файл и выберите место, где он будет лежать. На Linux часто используют /etc/nats/nats-server.conf:
|
1 2 |
sudo mkdir -p /etc/nats sudo nano /etc/nats/nats-server.conf |
NATS обычно настраивают через конфиг, а не через длинную строку флагов запуска. Формат поддерживает комментарии (# и //), массивы [] и блоки {}.
2. Задайте базовые параметры: порт для клиентов, имя сервера, PID-файл и мониторинг.
|
1 2 3 4 5 6 7 8 |
port: 4222 server_name: "nats-1" pid_file: "/var/run/nats/nats-server.pid" # Мониторинг (HTTP, без встроенной авторизации) http_host: "127.0.0.1" http_port: 8222 |
Мониторинг лучше привязывать к localhost и не публиковать наружу, так как у мониторингового порта нет встроенной аутентификации.
3. Подготовьте каталоги для PID и логов
|
1 2 3 |
sudo mkdir -p /var/run/nats /var/log/nats sudo chown -R root:root /var/run/nats /var/log/nats sudo chmod 755 /var/run/nats /var/log/nats |
4. Включите аутентификацию. Самый простой вариант ― список пользователей. Пример с двумя пользователями и базовыми правами на темы:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
authorization { users = [ { user: "app" password: "app-pass" permissions { publish: ["app.>"] subscribe: ["app.>"] } }, { user: "readonly" password: "readonly-pass" permissions { subscribe: ["app.>"] } } ] } |
Права задаются на уровне тем: что можно публиковать и на что можно подписываться.
5. Настройте логирование:
|
1 2 3 4 |
logfile: "/var/log/nats/nats.log" logtime: true debug: false trace: false |
6. Добавьте блок TLS. Пути укажите к вашему сертификату и ключу. Файлы сертификатов подготовьте заранее ― например, через корпоративный PKI или Let’s Encrypt.
|
1 2 3 4 5 6 |
tls { cert_file: "/etc/nats/certs/server.crt" key_file: "/etc/nats/certs/server.key" # ca_file: "/etc/nats/certs/ca.crt" # если нужен клиентский mTLS # verify: true # включить проверку клиентских сертификатов (mTLS) } |
7. Подключите JetStream, если нужны сохранение сообщений, подтверждения доставки и работа со стримами:
|
1 2 3 4 5 6 |
jetstream { store_dir: "/var/lib/nats/jetstream" max_mem: 1G max_file: 50G # domain: "acme" # опционально } |
Для JetStream важно: каждому серверу нужен свой каталог хранения, общий каталог на несколько нод ― плохая идея.
8. Включите WebSocket, если планируются подключения из браузера или из окружений, где удобнее WS. Пример (TLS для WebSocket включен по умолчанию):
|
1 2 3 4 5 6 7 |
websocket { port: 443 tls { cert_file: "/etc/nats/certs/ws-cert.pem" key_file: "/etc/nats/certs/ws-key.pem" } } |
Отключать TLS для WebSocket стоит только в тестовой среде.
9. Настройте кластер, если планируется несколько серверов.
Для кластера NATS потребуется несколько серверов, стабильная сеть между ними и надежное хранилище для JetStream. Разворачивать такую конфигурацию удобнее в облачной инфраструктуре, где можно быстро масштабировать ресурсы, настраивать приватные сети и распределять нагрузку между узлами.
Если вы планируете запуск в продакшн, обратите внимание на облачные решения Рег.облака. Платформа позволяет развернуть виртуальные серверы, объединить их в изолированную сеть и построить отказоустойчивый кластер NATS без закупки собственного оборудования и сложной сетевой настройки.
На каждой ноде нужен блок cluster и список routes до других нод:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
cluster { name: "prod-cluster" listen: "0.0.0.0:6222" authorization { user: "route_user" password: "route_pwd" timeout: 0.5 } routes = [ "nats://route_user:route_pwd@nats-2.internal:6222" "nats://route_user:route_pwd@nats-3.internal:6222" ] } |
10. Проверьте конфиг до запуска. У nats-server есть режим проверки, он читает файл и выходит, не стартуя сервер:
|
1 |
nats-server -c /etc/nats/nats-server.conf -t |
Флаг -t предназначен именно для теста конфигурации.
11. Запустите сервер с конфигом:
|
1 |
nats-server -c /etc/nats/nats-server.conf |
12. Примените изменения без полной остановки процесса. На Unix-системах конфиг можно перечитать сигналом SIGHUP через встроенную команду:
|
1 |
nats-server --signal reload |
Эта команда отправляет SIGHUP процессу и инициирует перезагрузку конфигурации.
13. Все настроив, убедитесь, что:
сервер слушает 4222:
|
1 |
ss -lntp | grep 4222 || netstat -an | grep 4222 |
мониторинг доступен только локально:
|
1 |
ss -lntp | grep 8222 |
JetStream включен (видно в /varz и по логам):
|
1 |
curl -s http://127.0.0.1:8222/varz | grep -i jetstream |

Подключение к NATS
К серверу NATS можно подключаться из консоли и проверять его работу: публиковать сообщения, подписываться на темы, отправлять запросы. Для этого используется официальный CLI-клиент ― nats.
Проще всего установить nats из релизов на GitHub. Обратите внимание: нужно выбрать актуальную версию клиента и пакет под вашу архитектуру (например, amd64 для 64-битной системы x86_64). Проверить архитектуру можно командой uname -m.
Пример для версии v0.1.5 и архитектуры amd64:
|
1 |
wget https://github.com/nats-io/natscli/releases/download/v0.1.5/nats-0.1.5-amd64.deb |
Установите пакет:
|
1 |
sudo dpkg -i nats-0.1.5-amd64.deb |
После установки файл можно удалить:
|
1 |
rm nats-0.1.5-amd64.deb |
По умолчанию NATS работает на 127.0.0.1:4222. Если сервер запущен локально и без аутентификации, дополнительных параметров не требуется.
Если настроены логин и пароль, подключение выглядит так:
|
1 |
nats --server nats://user:password@127.0.0.1:4222 server check |
Команда проверит доступность сервера.

Работа с NATS
После установки сервера и клиента можно переходить к практической работе: создавать темы, отправлять сообщения, организовывать обработчики и проверять поведение системы под нагрузкой.
Публикация сообщений
Сообщение отправляется в конкретную тему. Пример публикации в тему orders.created:
|
1 |
nats pub -s nats://127.0.0.1:4222 orders.created "Order #1001" |
Если сервер работает локально и без аутентификации, параметр -s можно не указывать.
Подписка на несколько сообщений
Чтобы получать поток сообщений, выполните:
|
1 |
nats sub orders.created |
Терминал будет ждать новые данные и выводить каждое полученное сообщение с порядковым номером.
Если нужно получить, например, только 5 сообщений и завершить работу:
|
1 |
nats sub orders.created --count=5 |
Использование шаблонов тем
Темы в NATS могут быть иерархическими. Это позволяет подписываться сразу на группу тем.
Публикация:
|
1 2 |
nats pub orders.us.created "Order #2001" nats pub orders.eu.created "Order #2002" |
Подписка на все события orders:
|
1 |
nats sub "orders.>" |
Символ > означает подписку на все вложенные темы.
Группы очереди
Если несколько сервисов должны обрабатывать одну и ту же тему, используется очередь подписчиков.
Откройте два терминала и выполните:
|
1 |
nats sub orders.created --queue workers |
Теперь каждое новое сообщение будет получать только один из подписчиков группы workers. Это позволяет распределять нагрузку между экземплярами сервиса.
Работа в режиме запрос-ответ
Один сервис может ждать запросы:
|
1 |
nats reply orders.status "Processed" |
Другой сервис отправляет запрос:
|
1 |
nats request orders.status "Check order #1001" |
В ответ отправитель получит строку Processed.
Проверка состояния сервера
Можно быстро проверить состояние сервера:
|
1 |
nats server info |
Если включен HTTP-порт мониторинга (например, 8222), доступна статистика через браузер:
|
1 |
http://127.0.0.1:8222/varz |
Там отображается информация о подключениях, нагрузке и использовании памяти.
Работа с NATS сводится к управлению темами и логикой обработки сообщений. Клиент nats удобен для тестирования, а в реальных проектах подключение выполняется из приложений через официальные библиотеки для Go, Java, Python, Node.js и других языков.
Заключение
NATS легко внедряется в инфраструктуру и не требует сложной подготовки. Установка занимает несколько минут, базовая настройка понятна даже без глубокого опыта работы с брокерами сообщений, а тестирование можно выполнить прямо из консоли.
В статье мы разобрали установку сервера и клиента, базовую конфигурацию, подключение и основные сценарии работы ― публикацию сообщений, подписку, очереди и режим запрос-ответ. Этого достаточно, чтобы запустить NATS в тестовой среде или встроить его в существующее приложение.
Дальше все зависит от задач: можно настроить аутентификацию и TLS, объединить серверы в кластер, включить JetStream для хранения сообщений и построить устойчивую распределенную систему обмена данными.

Блок FAQ
Что такое NATS?
NATS ― это брокер сообщений для обмена данными между сервисами и приложениями. Он передает сообщения по темам, поддерживает модель публикация―подписка и режим запрос―ответ, работает быстро и легко масштабируется. Используется в микросервисной архитектуре и распределенных системах.
Чем NATS отличается от Kafka?
NATS ориентирован на легкость, минимальные задержки и простоту развертывания. Он быстро запускается, требует меньше ресурсов и подходит для сервисного взаимодействия в реальном времени.
Kafka изначально спроектирована как распределенная платформа для потоковой обработки и долговременного хранения больших объемов данных. Она сложнее в настройке, но лучше подходит для аналитики, обработки событий и хранения истории сообщений.
Если нужна быстрая передача сообщений между сервисами ― чаще выбирают NATS. Если требуется хранить большие потоки событий и обрабатывать их задним числом ― используют Kafka.
Подходит ли NATS для микросервисов?
Да, NATS хорошо подходит для микросервисной архитектуры. Он обеспечивает быструю передачу сообщений между сервисами, поддерживает публикацию―подписку, очереди для распределения нагрузки и режим запрос―ответ.
Как настроить кластер NATS?
- Установите nats-server на несколько серверов.
- В конфигурации каждой ноды добавьте блок cluster:
|
1 2 3 4 5 6 7 8 9 10 11 |
server_name: "nats-1" cluster { name: "prod-cluster" listen: "0.0.0.0:6222" routes = [ "nats://nats-2:6222" "nats://nats-3:6222" ] } |
- На остальных нодах укажите свои server_name и пропишите маршруты до других участников кластера.
- Запустите серверы с этим конфигом:
|
1 |
nats-server -c /etc/nats/nats-server.conf |
Порт 6222 используется для связи между нодами. После запуска серверы автоматически объединятся в кластер.
Как обеспечивается безопасность?
Безопасность настраивается на нескольких уровнях:
- Аутентификация. Можно использовать логин и пароль, токены или NATS-аккаунты с ключами (NKey/JWT). Это ограничивает доступ к серверу только авторизованным клиентам.
- Авторизация. Для каждого пользователя задаются права: какие темы можно публиковать и на какие подписываться. Доступ настраивается в конфигурации сервера.
- TLS-шифрование. Подключения клиентов и взаимодействие внутри кластера можно защитить с помощью TLS. Это шифрует трафик и предотвращает перехват данных.
- Изоляция аккаунтов. NATS поддерживает разделение на аккаунты, что позволяет изолировать разные приложения или команды друг от друга.
- Ограничения ресурсов. Можно задавать лимиты на подключения, размер сообщений и объем хранения (при использовании JetStream).
При правильной настройке NATS можно безопасно использовать в production-среде, включая публичные сети.
Можно ли использовать NATS в Kubernetes?
Да, NATS часто разворачивают в Kubernetes. Его можно запустить как Deployment или StatefulSet, объединить ноды в кластер и подключить постоянное хранилище для JetStream через PersistentVolume.
Есть ли клиенты для разных языков?
Да, у NATS есть официальные клиенты для популярных языков: Go, Java, JavaScript/Node.js, Python, C#, C, Ruby и других.
Официальные библиотеки поддерживаются разработчиками NATS и обеспечивают работу с публикацией, подпиской, запрос―ответ и JetStream. Это позволяет интегрировать NATS практически в любой современный стек.
Как реализовать очереди?
Очереди реализуются через группы очереди (queue groups). Несколько подписчиков подключаются к одной теме с одинаковым именем группы, и каждое сообщение получает только один участник этой группы.
Пример запуска двух обработчиков:
|
1 |
nats sub orders.created --queue workers |
Если открыть эту же команду во втором терминале, оба процесса будут входить в группу workers. Теперь при публикации сообщения:
|
1 |
nats pub orders.created "New order" |
сообщение получит только один из подписчиков.
Так распределяется нагрузка между экземплярами сервиса без дополнительной логики в приложении.
Как мониторить NATS?
- Включить HTTP-порт мониторинга. В конфигурации сервера добавьте:
|
1 |
http_port: 8222 |
После перезапуска сервера статистика станет доступна по адресу:
|
1 |
http://127.0.0.1:8222/varz |
Также доступны эндпоинты /connz, /routez, /subsz, /jsz ― они показывают подключения, маршруты кластера, подписки и состояние JetStream.
- Использовать CLI-клиент. Проверьте состояние сервера:
|
1 |
nats server info |
- Интеграция с Prometheus и Grafana. NATS поддерживает экспорт метрик, которые можно собирать через Prometheus и визуализировать в Grafana. Это стандартный способ мониторинга в Kubernetes и production-среде.
Для базовой диагностики достаточно HTTP-эндпоинтов. Для постоянного контроля нагрузки и отказоустойчивости лучше подключать систему метрик.
Что такое subjects в NATS?
Subjects ― это темы, по которым передаются сообщения. Они определяют, куда будет доставлено сообщение и какие подписчики его получат.