Про RabbitMQ для QA. 2024
RabbitMQ — это мощная система брокера сообщений, широко используемая для асинхронного обмена данными между различными приложениями или микросервисами. В этой статье мы разберем структуру RabbitMQ, его основные компоненты, процесс взаимодействия, и почему его предпочитают использовать вместо простого REST API. Также рассмотрим, где хранятся очереди, как читать логи, и как работают производители и потребители.
Поставь лайк статье и подпишись❤
Основные компоненты RabbitMQ.
- Producer (Производитель): Приложение или процесс, который отправляет сообщения в RabbitMQ.
- Exchange (Обменник): Получает сообщения от производителей и направляет их в очереди на основе правил маршрутизации.
- Queue (Очередь): Место хранения сообщений до тех пор, пока их не заберет потребитель.
- Consumer (Потребитель): Приложение или процесс, который получает сообщения из очереди и обрабатывает их.
Взаимодействие с RabbitMQ: Пошаговый процесс
1. Запрос от внешнего источника
Представьте, что у вас есть веб-приложение для обработки заказов. Когда пользователь размещает заказ через веб-интерфейс, сервер принимает этот запрос и формирует сообщение с информацией о заказе.
Пример запроса от клиента (HTTP POST):
2. Отправка сообщения в RabbitMQ (Производитель)
Веб-сервер подключается к RabbitMQ и отправляет сообщение в обменник. Обменник маршрутизирует это сообщение в соответствующую очередь.
Сообщение в RabbitMQ:
3. Маршрутизация сообщения (Обменник)
Обменник получает сообщение от производителя и направляет его в одну или несколько очередей на основе ключа маршрутизации.
Пример маршрутизации:
- Exchange (Обменник): `order_exchange`
- Routing Key (Ключ маршрутизации): `order.created`
4. Получение и обработка сообщения (Потребитель)
Потребитель получает сообщение из очереди и выполняет необходимые действия, такие как обновление базы данных и взаимодействие с внешними API.
Пример обработанного сообщения:
5. Обновление интерфейса клиента
После успешной обработки заказа потребитель RabbitMQ отправляет уведомление на клиентский интерфейс через WebSocket или HTTP, чтобы обновить отображаемую информацию (например, статус заказа).
Пример ответа клиенту через WebSocket:
Почему RabbitMQ вместо REST API?
- Асинхронность: REST API работает синхронно, что может блокировать ресурсы. RabbitMQ позволяет отправлять сообщения асинхронно, повышая производительность.
- Надежность: RabbitMQ обеспечивает гарантированную доставку сообщений и их хранение до успешной обработки.
- Масштабируемость: RabbitMQ легко масштабируется, поддерживая тысячи очередей и сообщений в секунду.
- Устойчивость к сбоям: RabbitMQ поддерживает кластеризацию и высокую доступность, обеспечивая устойчивость системы.
Где хранятся очереди?
Очереди в RabbitMQ могут храниться как в оперативной памяти, так и на диске:
- Transient (Временные) очереди: Хранятся только в памяти.
- Durable (Устойчивые) очереди: Сохраняются на диске и восстанавливаются после перезапуска сервера.
Как читать логи?
Логи RabbitMQ можно найти в директории `/var/log/rabbitmq/` (для Linux) или аналогичных директориях для других операционных систем. Также можно использовать RabbitMQ Management Plugin для просмотра логов через веб-интерфейс.
Производители и потребители
- Производители (Producers): Отправляют сообщения в RabbitMQ. Производитель подключается к RabbitMQ и отправляет сообщение в обменник.
- Потребители (Consumers): Получают сообщения из очередей и обрабатывают их. Потребитель подключается к очереди и извлекает сообщение для обработки.
Управление памятью
RabbitMQ использует память для хранения сообщений. При переполнении памяти сообщения могут быть выгружены на диск. Для управления памятью используются настройки лимитов и политики, такие как `vm_memory_high_watermark`.
Вчитывание из очередей
Потребители читают сообщения из очередей с помощью следующих методов:
- Basic Get: Синхронное получение сообщения.
- Basic Consume: Асинхронная подписка на очередь.
Потребители подтверждают получение сообщений вручную или автоматически, обеспечивая надежную доставку.
Пример тестирования.
Позитивный тест.
Отправляем корректное сообщение заказа через интерфейс клиента в RabbitMQ, проверяем, что оно успешно попало в очередь и было обработано потребителем, обновившим статус заказа в клиентском интерфейсе.
Негативный тест.
Отправляем сообщение с неверным форматом данных специально через интерфейс RabbitMQ и проверяем, что система корректно обрабатывает ошибку, записывая соответствующую запись в логах и не обновляя базу данных.
Заключение
RabbitMQ — это мощный инструмент для асинхронного обмена сообщениями между приложениями. Он используется для повышения производительности и надежности систем, обеспечивая масштабируемость и устойчивость к сбоям. Понимание того, как производители и потребители взаимодействуют с очередями и обменниками, как управлять памятью и читать логи, является ключевым для эффективного использования RabbitMQ. Если говорить очень коротко про RabbitMQ, то он выступает в роли посредника, который принимает сообщения от одного источника (производителя) и перенаправляет их к нужному потребителю.
Подпишись на канал для будущих тестировщиков: ссылка жми