NATS — это простой, быстрый и легковесный брокер сообщений, написанный на языке программирования Go.
У NATS есть несколько особенностей организации данных:
- Ключ — Значение (Key — Value): Данные внутри NATS хранятся в форме «ключ — значение» так, что каждому ключу соответствует определенное значение.
- Темы (Subjects): Данные внутри NATS объединяются в так называемые «Темы», которые представляют собой именованные каналы для передачи сообщений. Темы можно разделять на сегменты из иерархических структур.
- Публикация/Подписка (Pub/Sub): Данные внутри NATS передаются через модель, в которой «Отправители» отправляют сообщения в «Темы», а «Получатели» могут подписываться на эти «Темы» для получения сообщений.
В отличие от многих других брокеров сообщений (например, Apache Kafka или RabbitMQ), NATS имеет несколько весомых преимуществ:
- Простота и производительность. Сообщения передаются через простой и быстрый протокол Pub/Sub. То есть при отправке сообщения в тему его мгновенно получают все те, кто на нее подписан. Таким образом, задержки и прочие накладные расходы минимальны.
- Отсутствие состояния. Информация о состоянии переданных через брокер сообщениях не сохраняется внутри него, равно как и данные по подписчиках тем. Отсутствие необходимости в запутанной синхронизации состояний позволяет NATS легко масштабироваться.
- Отсутствие очередей по умолчанию. В стандартной конфигурации NATS не формирует очереди сообщений. Это важно в тех случаях, когда своевременность данных важнее их сохранности. А еще это освобождает от управления очередями.
- Надежный протокол. Сообщения внутри брокера передаются по протоколу методом «at-most-once delivery» — «максимум одна доставка». Таким образом, подписчик либо получает сообщение один раз, либо не получает вообще. Благодаря этому повышается надежность коммуникации и предотвращаются дубли в реагировании на пересылаемые сообщения.
Таким образом, с помощью NATS можно выстраивать быструю и надежную коммуникацию между множеством различных сервисов.
В этом руководстве мы подробно рассмотрим как установить, настроить и корректно использовать NATS в собственных проектах, запущенных на операционной системе Ubuntu 22.04.
VDS и VPS
биллингом по всему миру: Россия, Азия и Европа.
Загрузка NATS
Обновление пакетов
Перед установкой рекомендуется обновить список доступных репозиториев в системе:
Загрузка архива
Далее необходимо вручную загрузить ZIP-архив с NATS с его официального репозитория на GitHub:
По завершении загрузки можно проверить список файлов:
Среди них будет архив с NATS:
Распаковка архива
Далее установим пакет, который выполняет распаковку ZIP-архивов:
Флаг -y добавляем, чтобы установщик автоматически ответил положительно на все возникающие вопросы.
Теперь разархивируем архив с NATS с помощью установленного распаковщика:
Проверим список файлов:
Как видно, появилась новая папка с содержимым архива:
Архив нам больше не нужен, поэтому удаляем его:
Установка NATS
Установка сервера
Давайте взглянем на содержимое появившейся папки:
Внутри нее есть основная директория с сервером NATS:
Именно ее мы должны скопировать в системный каталог с бинарными файлами:
А уже после копирования необходимо установить соответствующие права доступа:
Папку с содержимым NATS, по аналогии с архивом, теперь можно тоже удалить:
Проверка сервера
Сервер NATS можно считать установленным! Давайте убедимся в этом, запросив его версию:
В консольном терминале появится соответствующий вывод:
Однако эта команда не запускает сервер, а лишь возвращает его версию.
Выполнить запуск сервера можно следующим образом:
В консоли должен появиться примерно такой вывод:
В данном случае сервер запускается с привязкой к консольному терминалу, а не как фоновая служба. Поэтому, чтобы обратно выйти в режим ввода команд, нужно нажать сочетание клавиш Ctrl + C.
Конфигурация NATS
Создание конфигурационного файла
После того, как сервер брокера запущен, можно создать отдельный каталог для конфигурационного файла NATS:
А после непосредственно сам конфигурационный файл:
sudo nano /etc/nats/nats-server.conf
Его содержимое будет следующим:
Конкретно в этой конфигурации устанавливаются самые базовые параметры:
- name: Наименование сервера внутри кластера NATS.
- store_dir: Путь к директории, в которой будут храниться рабочие данные.
- listen: IP-адрес и порт, который будет занимать сервер NATS.
Создание отдельного пользователя
Для всех каталогов, связанных с NATS, необходимо создать отдельного пользователя:
Теперь создадим каталоги, указанные в конфигурационном файле:
Для каждой директории назначим соответствующие права доступа для ранее созданного пользователя:
Создание фоновой службы
Ранее мы запускали сервер NATS с привязкой к консольному терминалу. В этом случае при выходе из консоли сервер будет прекращать свою работу.
Чтобы этого не происходило, необходимо создать файл для службы systemd:
Его содержимое будет таким:
В этом файле есть несколько ключевых параметров:
- Description: Короткое описание службы.
- ExecStart: Команда запуска сервера NATS с явным указанием конфигурационного файла
- User: Имя пользователя, созданного специально под NATS
Созданную службу необходимо в явном виде добавить в список автозапуска:
Флаг --now сразу же запускает указанную службу.
В консоли появится соответствующее сообщение:
Теперь проверим статус запущенной службы:
Если служба сервера NATS запущена успешно, то среди консольного вывода будет соответствующее сообщение:
Подключение к NATS
К серверу NATS можно подключаться через консольный терминал и таким образом выполнять тестирование брокера сообщений. Например, публиковать сообщения или подписывать на темы.
Установка клиента
Для того чтобы управлять сервером NATS, необходимо установить соответствующий клиент natscli, который можно скачать с официального репозитория на GitHub:
После этого загруженный архив можно распаковать и установить:
А сам архив можно удалить за ненадобностью:
Отправка сообщений
Теперь можно отправить сообщение брокеру сообщений:
В этой команде мы отправляем сообщение «Some message» в тему «someSubject» брокеру сообщений, который запущен по IP-адресу 127.0.0.1 и расположен на стандартном порту NATS — 4222.
После этого в консольном терминале появится информация об отправленных данных:
Чтение сообщений
В данный момент никто не увидит это сообщение, так как отсутствует какой-либо агент, подписанный на указанную тему.
Мы можем сымитировать некий сервис, подписанный на тему и читающий сообщения, с помощью другой SSH-сессии.
Для этого нужно открыть еще один консольный терминал, подключиться к удаленной машине и подписаться на ранее указанную тему:
В терминале появится сообщение об успешной подписке:
Теперь повторим отправку сообщения с первого терминала:
Во втором терминале появится информация о новом сообщении:
Отправим еще одно сообщение с первого терминала:
Во втором терминале появится соответствующее извещение:
Обратите внимание, что консольный вывод полученных сообщений имеет нумерацию в квадратных скобках.
Программа на Go + NATS
Давайте создадим небольшую программу на языке программирования Golang с использованием брокера сообщений NATS.
Установка Go
Сперва необходимо убедиться, что в системе установлен компилятор Go:
Если в консольном терминале появилось следующее сообщение, то Go еще не установлен:
В этом случае его необходимо загрузить в виде архива с официального сайта:
А потом извлечь:
Загруженный архив больше не нужен, поэтому его можно удалить:
Далее необходимо прописать компилятор Go в переменную PATH, чтобы его можно было вызывать из терминала консоли:
А далее применяем изменения:
Теперь можно проверить корректность установки Go, запросив его версию:
В терминале появится следующий вывод:
Создание проекта
Создадим отдельную папку для программы на Golang:
После чего перейдем в нее:
А далее инициализируем проект Go:
Установка модуля
После инициализации проекта необходимо установить клиент NATS с официального репозитория на GitHub. Вручную ничего загружать не надо, достаточно воспользоваться встроенной в Golang функцией:
Написание кода
Теперь можно создать файл с кодом программы:
Его содержимое будет таким:
Теперь можно запустить созданную программу:
Результат работы программы появится в выводе консольного терминала:
Программа на Python + NATS
В качестве еще одного примера рассмотрим использование брокера сообщений NATS в языке программирования Python.
Сперва нужно убедиться, что интерпретатор Python установлен в системе, запросив его версию:
В консоли появится соответствующее сообщение:
Обратите внимание, что в этом руководстве используется Python версии 3.10.12.
Установка PIP
Для загрузки клиента NATS для Python сперва необходимо установить пакетный менеджер PIP:
Флаг -y поможет автоматически положительно ответить на все вопросы во время установки.
Установка клиента
Теперь можно установить клиент NATS для Python:
Создание проекта
Для программы на Python создадим отдельный каталог:
И перейдем в него:
Написание кода
Создадим файл с кодом программы:
Содержимое которого будет следующим:
Теперь можно запустить созданный скрипт:
Результатом его работы станет следующий вывод в консольном терминале:
Как можно заметить, логика работы этой программы на Python ничем не отличается от логики работы программы на Go. Разница лишь в синтаксических конструкциях конкретного языка программирования.
Подготовили для вас выгодные тарифы на VDS
477 ₽/мес
657 ₽/мес
Заключение
В этом руководстве было рассмотрено использование брокера сообщений NATS в виде последовательных этапов:
- Загрузка и установка NATS из официального репозитория на GitHub
- Минимальная конфигурация сервера NATS
- Управление сервером NATS через клиент консольного терминала
- Использование NATS в программе на Golang
- Использование NATS в программе на Python
Все используемые в этом руководстве клиенты NATS (для терминала, Go и Python) были загружены с официального репозитория NATS на GitHub, в котором размещаются модули и библиотеки для всех поддерживаемых NATS языков программирования.
Больше подробной информации о настройке и использовании NATS можно найти в официальной документации. Также есть множество официальных примеров использования NATS в разных языках программирования.
