Коли використовувати розширений протокол черги повідомлень, наприклад RabbitMQ? [зачинено]


45

Хтось може мені пояснити, у яких випадках використання я повинен розглянути можливість використання AMQP, наприклад, RabbitMQ? Які плюси і мінуси?


Є кілька хороших відповідей на подібне запитання щодо переповнення стека: використання в реальному світі черг JMS / повідомлень?
Ган

Ви можете переглянути посилання нижче. Вона має широкий опис: stackoverflow.com/a/51377756/3073945
Md . Sajedul Karim

Відповіді:


25

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

Якщо ви поставите чергу між веб-службою та обліковою системою, ви зможете:

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

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


1
1) Як сполучене з B краще, ніж зчеплене з C, а C - з B?
Чарлі

2) Чому б не поставити чергу в систему обліку? Навіщо вводити нову рухому частину чорної скриньки, яка потребує додаткової конфігурації?
Чарлі

2
@Charlie щодо питання 1, я змінив свою відповідь. Щодо питання 2, що саме ви маєте на увазі, ставлячи чергу в облікову систему? Ви хочете використовувати структуру даних черги? У такому випадку у вас буде більше коду для написання, щоб зберегти його. Ви хочете імітувати чергу за допомогою таблиці баз даних? Знову вам доведеться написати хороший код для управління цією таблицею. Щось ще, про що я не думав?
Виталий Олегович

Я пропускаю помилку за 1. Якщо черга розміщена у веб-сервісі або черга розміщена у додатку, залишається одна сполука. Якщо, однак, черга є зовнішньою для обох, тепер у вас є вдвічі більше з'єднання і на 50% більше систем для управління / точками відмови. Якщо обрана сторона сторонньої сторони, у вас також буде цей новий пакет для ознайомлення та налаштування, і він, ймовірно, буде обтяжений безліччю функцій, які ви не маєте інтересу використовувати, функції, додані для того, щоб зробити чергу загальним і корисною для набагато більше ситуацій, ніж ваша власна.
Чарлі

@Charlie, імовірно, брокер одного повідомлення буде використовуватися серед декількох систем. Або був би один проксі для брокера. (У нашому випадку ми використовуємо єдиний пристрій обміну повідомленнями, який може обробляти мільйони повідомлень в секунду для всіх наших систем). Це фактично створює більшу розв'язку, оскільки повідомлення генерується однією системою, і будь-яка зацікавлена ​​система може отримувати це повідомлення та виконувати відповідну логіку. Єдина зв’язка - до самої черги.
Майкл Браун

16

Окрім надання буфера між веб-службою та іншою сервісною службою, черги повідомлень можуть використовуватися і для більш складних сценаріїв. Rabbit MQ (та інші зрілі продукти для чергових повідомлень, які також називаються MOM - Посереднє програмне забезпечення, орієнтоване на повідомлення) можна налаштувати для маршрутизації та розповсюдження повідомлень відповідно до різних правил.

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

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

Це лише кілька сценаріїв, дозволених МОМ.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.