RabbitMQ пояснюється за 5 хвилин або менше

Сьогодні ми побачимо, як пришвидшити час завантаження ваших сторінок, виконуючи найважчу обробку асинхронно, і все це дуже просто завдяки RabbitMQ.

Стабільність і швидкість програми або веб-сайту, безумовно, є одними з найважливіших факторів для користувачів. Хто ніколи не залишав сайт, перш ніж навіть побачив першу сторінку, тому що це займало занадто багато часу?

Що таке RabbitMQ

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

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

Як працює RabbitHQ

У спрощеному вигляді RabbitMQ визначає черги, які зберігатимуть повідомлення, надіслані виробниками, доки програми-споживачі не отримають повідомлення та не оброблять його. Це дозволяє нам проектувати та впроваджувати розподілені системи, у яких система розділена на незалежні модулі, які спілкуються один з одним за допомогою повідомлень.

Як і для будь-якої комунікації, нам потрібні виробник, повідомлення та одержувач. Посередині торта знаходиться RabbitMQ, це місце, де повідомлення очікує на одержувача.

Давайте краще зрозуміємо, як це працює, знаючи типи обміну, що представляють обмін повідомленнями.

Типи обміну

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

Авторство зображення: CloudAQMP

Типи обміну: Direct, Fanout, Topic і Readers.

Прямий обмін

Припустимо, що виробник повинен надіслати повідомлення з підтвердженням покупки трьом споживачам. Тобто системі потрібно зв’язатися з трьома іншими різними системами, щоб здійснити покупку.

Оскільки RabbitMQ надсилає повідомлення окремо до кожної черги, є імпульс для того, щоб ці інші системи отримували повідомлення безпосередньо.

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

  Повний посібник із організації зустрічей та приєднання до них

Таким чином, ви можете надіслати своє повідомлення лише одному споживачеві; замість того, щоб надсилати всім.

Ключ прив’язки: щоб підключити чергу до біржі, потрібно створити прив’язку, зв’язок між чергою та біржею, як конектор.

Ключ маршрутизації: у цьому зв’язуванні ми також можемо створити елемент під назвою ключ маршрутизації, який, іншими словами, є ключем для пересилання наших повідомлень до певної черги.

Якщо у вас є ключ маршрутизації X, ключ маршрутизації Y і ключ маршрутизації Z, повідомлення з ключем маршрутизації Y, наприклад, пройде через чергу Y і буде доставлено безпосередньо споживачеві, якого ви визначили для отримання повідомлення.

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

Fanout Exchange

Коли повідомлення надсилається на біржу, воно надсилається всім чергам, підключеним до неї. Отже, якщо у вас є 10 черг, підключених до обміну fanout, усі черги отримають надіслане повідомлення.

Обмін темами

Це одна з найбільш гнучких бірж, що дозволяє нам надсилати повідомлення відповідно до теми. І на основі того, як ви називаєте ключі маршрутизації, можна створювати шаблони правил і зв’язків між системами.

Наприклад: ключ маршрутизації (x.*); ключ маршрутизації (*.z); ключ маршрутизації (*.y.*).

Що таке AQMP у RabbitMQ

AMQP (Advanced Message Queuing Protocol) — це відкритий протокол обміну повідомленнями, який використовується для визначення передачі повідомлень між кількома програмами. Він подібний до протоколів HTTP і TCP тим, що це протокол дротового рівня, за винятком того, що він допускає асинхронний транспорт.

RabbitMQ вирішив реалізувати AMQP з кількох причин. По-перше, цей протокол описується як стандарт для проміжного ПЗ, на відміну від JMS, який визначає API.

Специфікацію AMQP написав міжнародний консорціум, до складу якого входять такі великі компанії, як Red Hat, Cisco Systems і Microsoft. По-друге, це сумісність цього протоколу, що дозволяє будь-якій програмі, що реалізує AMQP, спілкуватися з брокером AMQP.

AMQP — не єдиний протокол, який використовує RabbitMQ. На зображенні нижче представлені всі протоколи, мови та API, реалізовані та/або підтримувані RabbitMQ.

Найкращі функції RabbitMQ

На додаток до можливості інтеграції різних програм за допомогою повідомлень асинхронно та з різних місць, RabbitMQ пропонує нам інші функції, які зробили його дуже популярним у світі брокерів обміну повідомленнями:

  Як надсилати електронні листи через Gmail на Python?

Надійне зберігання

RabbitMQ містить кілька функцій, які дозволяють гарантувати доставку повідомлень. Серед них він забезпечує зберігання, коли жоден споживач не може отримати повідомлення. Це дозволяє споживачам прийняти доставку повідомлення, щоб переконатися, що воно було успішно оброблено.

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

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

Створення кластерів

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

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

Високодоступні черги

У RabbitMQ черги можна реплікувати на кількох вузлах у кластері, гарантуючи, що у випадку збою вузла або простою брокер може продовжувати отримувати повідомлення від виробників і доставляти їх відповідним споживачам.

Гнучка маршрутизація

У RabbitMQ можна визначити гнучкі правила маршрутизації, навіть дотримуючись певного шаблону, для маршрутизації повідомлень між біржами та чергами через прив’язки.

Підтримка кількох протоколів

Крім підтримки протоколу AMQP, RabbitMQ підтримує STOMP, MQTT і HTTP через плагіни. Він також містить механізми автентифікації та контролю доступу для кожного компонента брокера.

Реальні випадки використання RabbitMQ

Найважливіші випадки використання RabbitMQ — це забезпечення асинхронності між програмами, зменшення зв’язку між програмами, розповсюдження сповіщень і контроль черги завдань у фоновому режимі.

Однак приклади практичного використання RabbitMQ є в електронній комерції, де t використовується для маніпулювання, обробки та пересилання ваших замовлень на продаж до систем в інших секторах, таких як дистрибуція та виставлення рахунків-фактур.

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

  10 потужних програм для доставки для розвитку електронної комерції

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

І оскільки кожен із цих секторів є окремою системою, метою RabbitMQ є пересилання всіх цих повідомлень до відповідних систем.

Альтернативи Rabbit MQ:

RabbitMQ набагато простіший, ніж здається, і є кілька альтернатив, серед яких:

#1. IronMQ

IronMQ — це надшвидке програмне забезпечення для створення черги повідомлень. Він дуже доступний, має міцний дизайн і бажано для одноразової доставки. IronMQ — це найпотужніше хмарне рішення для сучасної архітектури додатків.

Він підтримує черги push, черги pull і довгі опитування, завдяки чому запити на опитування залишаються відкритими довше. Крім того, він може використовувати кілька центрів обробки даних з високою доступністю, що полегшує масштабованість.

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

#2. Апач Кафка

Kafka — це платформа з сильною присутністю в потоковому розподіленні подій. За своєю суттю Kafka розроблено як реплікований, розподілений, постійний журнал фіксації.

Його найбільше зручно використовувати для мікросервісів, керованих подіями, або великомасштабних додатків обробки потоків, автоматичного асинхронного тиражування подій у кластері для відмовостійкості та високої доступності.

#3. Apache ActiveMQ

ActiveMQ — це багатопротокольний брокер повідомлень на основі Java. З його допомогою ми можемо інтегрувати програми за допомогою протоколу черги повідомлень AMQP на прикладному рівні.

Він реалізує кілька протоколів для інтеграції, таких як JMS (власний Java) і Stomp (який може використовуватися програмами PHP), серед інших.

Крім того, Amazon має свою «керовану» версію під назвою Amazon MQ, яка значно полегшує використання сервісу.

Заключні слова

Посередники обміну повідомленнями традиційно були важливою частиною архітектури організацій. Тим не менш, із збільшенням кількості користувачів, які входять в системи компанії через різні канали, потрібні продукти, які дозволяють горизонтально масштабувати їх за низькою ціною. Дозволяє обробляти велику кількість повідомлень в секунду.

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

Ви також можете дослідити кілька надійних хостингових платформ RabbitMQ для своєї програми.