Быть в курсе
Аватарка автора Редакция Рег.облако
ИнструкцииОблако

Установка, настройка и использование NATS

26 февраля 2026

16 минут

Телеграм

ВКонтакте

В этой статье разберем, как установить 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 решает эту задачу ― он сохраняет сообщения на диск или в память, позволяет подтверждать получение, повторно доставлять данные и управлять потоками сообщений.
Источник: Freepik. NATS — это легковесная система обмена сообщениями для распределенных приложений и микросервисов

Установка NATS на Linux

1. Обновите список пакетов и установленные компоненты системы:

Debian/Ubuntu:

CentOS/AlmaLinux/Rocky Linux:

2. Откройте страницу релизов nats-server на GitHub и выберите архив под вашу архитектуру (например, Linux AMD64). Подставьте актуальную версию вместо X.Y.Z.

3. Скачайте архив:

4. Распакуйте архив:

5. Скопируйте бинарный файл в каталог, который входит в переменную PATH:

6. Проверьте установленную версию:

7. Запустите сервер вручную, чтобы убедиться, что он работает. По умолчанию используется порт 4222:

Остановить можно сочетанием Ctrl + C.

Источник: Freepik. Сервер NATS принимает подключения клиентов по TCP и маршрутизирует сообщения между издателями и подписчиками

Установка NATS на Windows

1. Откройте PowerShell.
2. Установите Scoop, если он еще не установлен:

Scoop ― это менеджер пакетов для Windows. Он автоматически скачивает программы, настраивает переменные окружения и добавляет исполняемые файлы в PATH. Без него пришлось бы вручную искать архив с nats-server, распаковывать его и прописывать путь к бинарному файлу. Через Scoop установка занимает одну команду и упрощает обновления в будущем.

3. Установите NATS Server:

Команда скачает последнюю доступную версию и сделает nats-server доступным из любой директории.

4. Проверьте установку:

Если версия отображается, сервер установлен корректно.

5. Запустите NATS:

По умолчанию сервер слушает порт 4222. Остановить его можно сочетанием Ctrl + C.

Источник: Freepik. В модели публикация-подписка отправители и получатели сообщений не зависят друг от друга и взаимодействуют через темы

Настройка NATS

1. Создайте конфигурационный файл и выберите место, где он будет лежать. На Linux часто используют /etc/nats/nats-server.conf:

NATS обычно настраивают через конфиг, а не через длинную строку флагов запуска. Формат поддерживает комментарии (# и //), массивы [] и блоки {}.

2. Задайте базовые параметры: порт для клиентов, имя сервера, PID-файл и мониторинг.

Мониторинг лучше привязывать к localhost и не публиковать наружу, так как у мониторингового порта нет встроенной аутентификации.

3. Подготовьте каталоги для PID и логов

4. Включите аутентификацию. Самый простой вариант ― список пользователей. Пример с двумя пользователями и базовыми правами на темы:

Права задаются на уровне тем: что можно публиковать и на что можно подписываться.

5. Настройте логирование:

6. Добавьте блок TLS. Пути укажите к вашему сертификату и ключу. Файлы сертификатов подготовьте заранее ― например, через корпоративный PKI или Let’s Encrypt.

7. Подключите JetStream, если нужны сохранение сообщений, подтверждения доставки и работа со стримами:

Для JetStream важно: каждому серверу нужен свой каталог хранения, общий каталог на несколько нод ― плохая идея.

8. Включите WebSocket, если планируются подключения из браузера или из окружений, где удобнее WS. Пример (TLS для WebSocket включен по умолчанию):

Отключать TLS для WebSocket стоит только в тестовой среде.

9. Настройте кластер, если планируется несколько серверов.

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

Если вы планируете запуск в продакшн, обратите внимание на облачные решения Рег.облака. Платформа позволяет развернуть виртуальные серверы, объединить их в изолированную сеть и построить отказоустойчивый кластер NATS без закупки собственного оборудования и сложной сетевой настройки.

На каждой ноде нужен блок cluster и список routes до других нод:

10. Проверьте конфиг до запуска. У nats-server есть режим проверки, он читает файл и выходит, не стартуя сервер:

Флаг -t предназначен именно для теста конфигурации.

11. Запустите сервер с конфигом:

12. Примените изменения без полной остановки процесса. На Unix-системах конфиг можно перечитать сигналом SIGHUP через встроенную команду:

Эта команда отправляет SIGHUP процессу и инициирует перезагрузку конфигурации.

13. Все настроив, убедитесь, что:

сервер слушает 4222:

мониторинг доступен только локально:

JetStream включен (видно в /varz и по логам):

Источник: Freepik. Группы очередей позволяют распределить нагрузку между несколькими подписчиками одной темы

Подключение к NATS

К серверу NATS можно подключаться из консоли и проверять его работу: публиковать сообщения, подписываться на темы, отправлять запросы. Для этого используется официальный CLI-клиент ― nats.

Проще всего установить nats из релизов на GitHub. Обратите внимание: нужно выбрать актуальную версию клиента и пакет под вашу архитектуру (например, amd64 для 64-битной системы x86_64). Проверить архитектуру можно командой uname -m.

Пример для версии v0.1.5 и архитектуры amd64:

Установите пакет:

После установки файл можно удалить:

По умолчанию NATS работает на 127.0.0.1:4222. Если сервер запущен локально и без аутентификации, дополнительных параметров не требуется.

Если настроены логин и пароль, подключение выглядит так:

Команда проверит доступность сервера.

Источник: Freepik. JetStream расширяет возможности NATS, добавляя сохранение сообщений и гарантии доставки

Работа с NATS

После установки сервера и клиента можно переходить к практической работе: создавать темы, отправлять сообщения, организовывать обработчики и проверять поведение системы под нагрузкой.

Публикация сообщений

Сообщение отправляется в конкретную тему. Пример публикации в тему orders.created:

Если сервер работает локально и без аутентификации, параметр -s можно не указывать.

Подписка на несколько сообщений

Чтобы получать поток сообщений, выполните:

Терминал будет ждать новые данные и выводить каждое полученное сообщение с порядковым номером.

Если нужно получить, например, только 5 сообщений и завершить работу:

Использование шаблонов тем

Темы в NATS могут быть иерархическими. Это позволяет подписываться сразу на группу тем.

Публикация:

Подписка на все события orders:

Символ > означает подписку на все вложенные темы.

Группы очереди

Если несколько сервисов должны обрабатывать одну и ту же тему, используется очередь подписчиков.

Откройте два терминала и выполните:

Теперь каждое новое сообщение будет получать только один из подписчиков группы workers. Это позволяет распределять нагрузку между экземплярами сервиса.

Работа в режиме запрос-ответ

Один сервис может ждать запросы:

Другой сервис отправляет запрос:

В ответ отправитель получит строку Processed.

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

Можно быстро проверить состояние сервера:

Если включен HTTP-порт мониторинга (например, 8222), доступна статистика через браузер:

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

Работа с NATS сводится к управлению темами и логикой обработки сообщений. Клиент nats удобен для тестирования, а в реальных проектах подключение выполняется из приложений через официальные библиотеки для Go, Java, Python, Node.js и других языков.

Заключение

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

В статье мы разобрали установку сервера и клиента, базовую конфигурацию, подключение и основные сценарии работы ― публикацию сообщений, подписку, очереди и режим запрос-ответ. Этого достаточно, чтобы запустить NATS в тестовой среде или встроить его в существующее приложение.

Дальше все зависит от задач: можно настроить аутентификацию и TLS, объединить серверы в кластер, включить JetStream для хранения сообщений и построить устойчивую распределенную систему обмена данными.

Источник: Freepik. Иерархическая структура тем обеспечивает гибкую маршрутизацию и управление подписками в NATS

Блок FAQ

Что такое NATS?

NATS ― это брокер сообщений для обмена данными между сервисами и приложениями. Он передает сообщения по темам, поддерживает модель публикация―подписка и режим запрос―ответ, работает быстро и легко масштабируется. Используется в микросервисной архитектуре и распределенных системах.

Чем NATS отличается от Kafka?

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

Kafka изначально спроектирована как распределенная платформа для потоковой обработки и долговременного хранения больших объемов данных. Она сложнее в настройке, но лучше подходит для аналитики, обработки событий и хранения истории сообщений.

Если нужна быстрая передача сообщений между сервисами ― чаще выбирают NATS. Если требуется хранить большие потоки событий и обрабатывать их задним числом ― используют Kafka.

Подходит ли NATS для микросервисов?

Да, NATS хорошо подходит для микросервисной архитектуры. Он обеспечивает быструю передачу сообщений между сервисами, поддерживает публикацию―подписку, очереди для распределения нагрузки и режим запрос―ответ.

Как настроить кластер NATS?

  1. Установите nats-server на несколько серверов.
  2. В конфигурации каждой ноды добавьте блок cluster:
  1. На остальных нодах укажите свои server_name и пропишите маршруты до других участников кластера.
  2. Запустите серверы с этим конфигом:

Порт 6222 используется для связи между нодами. После запуска серверы автоматически объединятся в кластер.

Как обеспечивается безопасность?

Безопасность настраивается на нескольких уровнях:

  1. Аутентификация. Можно использовать логин и пароль, токены или NATS-аккаунты с ключами (NKey/JWT). Это ограничивает доступ к серверу только авторизованным клиентам.
  2. Авторизация. Для каждого пользователя задаются права: какие темы можно публиковать и на какие подписываться. Доступ настраивается в конфигурации сервера.
  3. TLS-шифрование. Подключения клиентов и взаимодействие внутри кластера можно защитить с помощью TLS. Это шифрует трафик и предотвращает перехват данных.
  4. Изоляция аккаунтов. NATS поддерживает разделение на аккаунты, что позволяет изолировать разные приложения или команды друг от друга.
  5. Ограничения ресурсов. Можно задавать лимиты на подключения, размер сообщений и объем хранения (при использовании 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). Несколько подписчиков подключаются к одной теме с одинаковым именем группы, и каждое сообщение получает только один участник этой группы.

Пример запуска двух обработчиков:

Если открыть эту же команду во втором терминале, оба процесса будут входить в группу workers. Теперь при публикации сообщения:

сообщение получит только один из подписчиков.

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

Как мониторить NATS?

  1. Включить HTTP-порт мониторинга. В конфигурации сервера добавьте:

После перезапуска сервера статистика станет доступна по адресу:

Также доступны эндпоинты /connz, /routez, /subsz, /jsz ― они показывают подключения, маршруты кластера, подписки и состояние JetStream.

  1. Использовать CLI-клиент. Проверьте состояние сервера:
  1. Интеграция с Prometheus и Grafana. NATS поддерживает экспорт метрик, которые можно собирать через Prometheus и визуализировать в Grafana. Это стандартный способ мониторинга в Kubernetes и production-среде.

Для базовой диагностики достаточно HTTP-эндпоинтов. Для постоянного контроля нагрузки и отказоустойчивости лучше подключать систему метрик.

Что такое subjects в NATS?

Subjects ― это темы, по которым передаются сообщения. Они определяют, куда будет доставлено сообщение и какие подписчики его получат.

Новые статьи