JavaRush /Курси /Модуль 4: FastAPI /Вступ до RabbitMQ: як він працює і навіщо потрібен

Вступ до RabbitMQ: як він працює і навіщо потрібен

Модуль 4: FastAPI
Рівень 12 , Лекція 1
Відкрита

Основи RabbitMQ

RabbitMQ вважається однією з найпопулярніших систем керування чергами, і не дарма. RabbitMQ — це брокер повідомлень, який дозволяє застосунку обмінюватися даними, відсилаючи повідомлення між продюсерами (producers) і консьюмерами (consumers). Перед тим як почнемо говорити про потужні фічі RabbitMQ, давайте визначимося з базовими поняттями.

RabbitMQ працює на основі протоколу AMQP (Advanced Message Queuing Protocol). Звучить складно, але насправді все просто: брокер повідомлень — це щось на кшталт листоноші. Ви (продюсер) передаєте лист (повідомлення) у відділення (RabbitMQ), а воно розподіляє листи консьюмерам. При цьому відділення може бути влаштоване так, щоб листи потрапляли тільки певним адресатам, або доставлялися всім одразу — але про це трохи пізніше.

RabbitMQ "з коробки" підтримує багато мов програмування, включно з нашим улюбленим Python. Наприклад, популярна бібліотека pika дозволяє працювати з RabbitMQ максимально зручно.


Архітектура RabbitMQ

RabbitMQ працює за принципом "пиши-передай", тобто повідомлення спочатку поміщаються в чергу (або exchange), а потім доставляються зацікавленим сторонам.

Основні компоненти:

  1. Продюсери (Producers)
    Продюсери відправляють повідомлення в RabbitMQ. Їм байдуже, хто їх прочитає і як (або коли). Головне — щоб повідомлення пішло. Наприклад: мікросервіс оплати відправляє повідомлення про нове замовлення в exchange RabbitMQ.
  2. Черги (Queues)
    Черга — це, грубо кажучи, список повідомлень, які чекають на обробку. Черга спрощує взаємодію між продюсером і консьюмером. Ви можете налаштувати чергу так, щоб вона зберігалася при перезапуску RabbitMQ, а можете зробити її тимчасовою.
  3. Консьюмери (Consumers)
    Консьюмери читають повідомлення з черг. Вони можуть підтвердити обробку повідомлення (або відмовитися від нього, якщо щось пішло не так). Наприклад, мікросервіс доставки може бути консьюмером, який отримує інформацію про нові замовлення з черги.
  4. Обмінники (Exchanges)
    Обмінник — це просунутий поштова скринька. Він вирішує, в яку чергу відправити повідомлення. Обмінники бувають кількох видів:
    • Direct (Пряма) — повідомлення спрямовується в чергу з певною назвою.
    • Fanout (Розсилка) — повідомлення відправляється у всі прив'язані черги.
    • Topic (Тема) — повідомлення відправляється чергам, які відповідають заданій темі (наприклад, "logs.error").
    • Headers (Заголовки) — маршрутизація на основі вмісту заголовків повідомлення.

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

RabbitMQ став де-факто стандартом у світі інструментів для обробки черг повідомлень. Давайте розберемося, що ж особливого в цій системі.

  • Забезпечення відмовостійкості
    RabbitMQ дозволяє створювати постійнi (durable) черги і повідомлення. Це означає, що навіть якщо ваш RabbitMQ сервер впаде, повідомлення не загубляться і ви зможете продовжити їх обробку після відновлення. Наприклад, у e-commerce проєкті, де не можна втрачати інформацію про замовлення, це справжнє порятунок.
  • Зручна маршрутизація
    RabbitMQ підтримує гнучку маршрутизацію повідомлень. Наприклад, ви можете налаштувати систему так, щоб повідомлення про створення замовлень потрапляли в одну чергу, а повідомлення про помилки — в іншу. Це ефективно розвантажує ваші компоненти і спрощує їх розробку.
  • Масштабованість
    Якщо ваша система починає страждати від навантаження, ви можете додати більше консьюмерів, які будуть обробляти повідомлення паралельно. RabbitMQ дозволяє підключати додаткові сервери і створювати кластер, щоб впоратися зі зростанням трафіку.
  • Підтримка плагінів
    RabbitMQ підтримує купу плагінів, які роблять його ще потужнішим. Наприклад, Shovel і Federation дозволяють передавати повідомлення між різними серверами RabbitMQ, а плагіни для моніторингу дають глибоку аналітику.

RabbitMQ у реальному житті

Уявіть, що ви розробляєте e-commerce платформу. Як зробити так, щоб замовлення оброблялися швидко і без помилок? Ось як це може виглядати:

  1. Користувач розміщує замовлення на вашому сайті.
  2. Frontend відправляє запит на бекенд FastAPI, який виступає в ролі продюсера.
  3. FastAPI передає повідомлення з даними замовлення в RabbitMQ.
  4. RabbitMQ додає повідомлення в чергу "orders".
  5. Консьюмер у мікросервісі доставки отримує повідомлення з черги і починає обробляти замовлення.

RabbitMQ чудово підходить для виконання важких завдань, які не можна (або не потрібно) виконувати синхронно. Наприклад:

  • Відправка масових листів.
  • Генерація звітів.
  • Парсинг великих даних.

RabbitMQ дозволяє передати важке завдання в чергу, де воно буде оброблене пізніше, не блокуючи основний потік застосунку.


Чому RabbitMQ?

Ви могли чути про такі інструменти, як Kafka, Redis Streams або ActiveMQ. У кожного свої плюси. Однак RabbitMQ вирізняється серед інших своєю простотою і зручністю для більшості кейсів. Наприклад:

  • У порівнянні з Kafka, RabbitMQ простіше налаштовувати і використовувати в невеликих проєктах.
  • Redis Streams добре підходять для потокової обробки даних, але не підтримують такої багатої маршрутизації, як RabbitMQ.

Якщо ви не плануєте обробляти мільярди подій за секунду або будувати систему аналітики рівня Google, RabbitMQ — ваш вибір. Він ідеально підходить для завдань середньої складності і мікросервісної архітектури.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ