Брокер сообщений Redis: как работает и как использовать

    Команда Simple-Server
    03.06.2026
    8 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Зачем нужен брокер сообщений

    В первую очередь брокер сообщений упрощает обмен информацией между системами и приложениями, даже если они работают на разных языках и платформах. При небольшом количестве участников обмениваться данными можно напрямую, однако с увеличением количества участников возникает потребность в большей интерактивности, и этот способ становится неэффективным. В таких случаях лучше использовать брокер сообщений, который управляет процессом обмена информацией и является посредником между отправителем и получателем.

    Особенно он будет полезен для асинхронного взаимодействия микросервисов. Асинхронная связь не требует ожидания ответа в режиме реального времени. В качестве примера можно привести электронную почту, где пользователи могут отправить письмо и продолжить выполнять другие задачи.

    Основные компоненты брокера сообщений:

    • Producer отвечает за отправку сообщений в брокер, который затем доставляет их подписчикам.
    • Consumer получает и обрабатывает сообщения из брокера сообщений.
    • Queue представляет собой модель отправки и получения сообщений, где отправители помещают сообщения в очередь, а получатели извлекают их из очереди. Каждое сообщение обрабатывается только одним получателем.
    • Topic — это модель отправки и получения сообщений, где producer отправляет сообщения на конкретную тему, а получатели, подписанные на эту тему, получают эти сообщения.

    Модели обмена сообщениями при помощи брокера сообщений

    Реализовать обмен сообщениями можно несколькими способами. разберём три основных.

    Обмен сообщениями «Point-to-Point»

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

    Преимущество модели P2P заключается в том, что каждая транзакция обрабатывается всего один раз. Один из примеров использования P2P для обмена сообщениями — это обработка транзакций, где надежность и безопасность являются ключевыми факторами.

    При использовании шаблона pub/sub сообщения распространяются между всеми пользователями, подписанными на общую тему. Это полезно для реализации механизмов уведомлений или распределения независимых задач. Причем Redis поддерживает различные типы сообщений, включая строки, хэши, списки и множества, что позволяет использовать его для передачи различных типов данных.

    Самые простые примеры, где реализуется данная модель: телеграм-каналы и онлайн-чаты. Кроме того, Redis можно использовать для передачи информации о событиях между разными инстансами приложений. Этот механизм может помочь отслеживать изменения в базе данных и активность пользователей.

    Гибридная модель обмена сообщениями

    Данная модель объединяет вместе P2P и Pub/Sub. Сообщения могут быть отправлены как в определенную очередь, так и в канал с определенной тематикой, чтобы их получили все подписчики одновременно.

    Как использовать брокер сообщений Redis

    Для того, чтобы использовать Redis как брокер сообщений, его необходимо скачать и установить на сервер. После того, как Redis установлен, его необходимо запустить по инструкции redis-server, затем проверить корректность установки при помощи инструкции redis-cli.

    И в завершении необходимо проверить конфигурационный файл, чтобы убедиться, что модуль Redis Pub/Sub включен. Если по какой-то причине он не работает, то в этот же конфигурационный файл добавьте строку следующего содержания:

    loadmodule /usr/lib/redis/modules/redisearch.so

    Создание очереди при помощи списка

    Redis предоставляет удобную структуру данных в виде списков, которые могут быть использованы для создания простых очередей. Списки Redis List обладают базовыми операциями и могут быть заблокированы. Их можно эффективно использовать для создания высокопроизводительных систем чата, лент комментариев и новостей в социальных сетях, а также для систем взаимодействия серверов в режиме реального времени.

    Очереди сообщений создаются следующим образом:

    RPUSH <queue_name> <message> RPUSH <queue_name> <message2>

    Так мы создали очередь с именем «queue_name» и добавили в нее два сообщения «message» и «message2».

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

    Ряд команд, которые используются для управления очередями:

    • LPOP <queue_name> — получение и удаление элемента из начала списка;
    • RPOP<queue_name> — получение и удаление элемента из конца списка;
    • BLPOP <queue_name> <timeout> — блокирующее получение и удаление элемента из начала списка, где timeout указывается в секундах в качестве последнего аргумента;
    • BRPOP <queue_name> <timeout> — блокирующее получение и удаление элемента из конца списка;
    • BRPOPLPUSH <source_queue_namet> <destination_queue_namet> <timeout> — блокирующее получение и перемещение элемента из конца одного списка в начало другого списка;
    • LLEN <queue_name> — получение количества элементов в списке;
    • LRANGE <queue_name> <start> <stop> — получение списка сообщений, которые были отправлены на канал, где вместо start указывается начальный индекс элемента, а вместо stop — конечный индекс элемента, на котором заканчивается извлечение;
    • LINDEX <queue_name> <indext> — получение элемента списка по индексу.

    Команды LPUSH/RPUSH, LPOP/RPOP, BLPOP/BRPOP, BRPOPLPUSH используются для создания простых очередей сообщений, а команды LLEN и LINDEX применяют для мониторинга состояния очередей сообщений.

    Надежные очереди гарантируют доставку сообщений в нужном порядке. Для их реализации используется команда BLMOVE. Она позволяет переносить элементы между списками, сохраняя при этом порядок элементов и обеспечивая блокировку в случае, когда список пустой. Если список source не обрабатывает сообщения до конца, команда blmove позволяет перенести сообщение в запасной список destination для дальнейшей обработки.

    Рассмотрим синтаксис команды:

    BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout
    • source — название списка (источника), из которого извлекается элемент;
    • destination — название списка (источника), в который необходимо переместить этот элемент;
    • LEFT|RIGHT в первом случае обозначает направление извлечения элемента и помещение его в destination;
    • LEFT|RIGHT второе по порядку обозначает направление блокировки в случае пустого списка;
    • timeout — время блокировки в секундах, если бесконечная блокировка, то значение равно 0.

    Реализация механизма pub/sub

    В Redis Pub/Sub сообщения, которые отправляются через каналы, называются push-сообщениями. Для того, чтобы оформить подписку на канал, необходимо использовать инструкцию SUBSCRIBE с указанием канала:

    SUBSCRIBE timeweb_channel

    Чтобы опубликовать push-сообщение в канал, в достаточно использовать команду PUBLISH:

    PUBLISH timeweb_channel "Приветствуем в нашем канале"

    Таким же образом можно отписаться от канала, используя команды UNSUBSCRIBE или PUNSUBSCRIBE.

    Создание потоковой очереди типа Stream

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

    Создать поток сообщений можно, используя следующую команду:

    XADD name_stream * message1 _message2 _ message3

    где команда XADD создает новое сообщение в потоке и добавляет его в конец потока.

    XREAD COUNT 3 STREAMS name_stream 1
    • команда XREAD используется для чтения сообщений из одного или нескольких потоков;
    • COUNT 3 обозначает количество сообщений, которые необходимо прочитать из потока, а 1 указывает на то, с какого сообщения необходимо начать чтение.

    Также для управления потоковыми очередями в Redis и обработки сообщений в этих очередях будут полезны следующие команды:

    • XGROUP — создание новой группы потоков или обновление существующей;
    • XREADGROUP — чтение сообщения из указанной группы потоков;
    • XDEL — удаление сообщения из потока;
    • XPENDING — получение информации о необработанных сообщениях в группе потоков в Redis.

    Но нужно учитывать, что команды типа Stream можно использовать только в случае, если версия Redis начинается от 5.0 и выше.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны