Введення: У RabbitMQ усі повідомлення, наділені виробниками, приймаються Exchange, яка потім пересилає їх до Queue для зберігання відповідно до конкретної політики RabbitMQ пропонує чотири типи обмінів: fanout, direct, topic та header Режим заголовка використовується рідше на практиці, і ця стаття порівнює лише перші три режими.
1. Прямий обмін
Будь-які повідомлення, надіслані до Direct Exchange, пересилаються до Черги, вказаної в RouteKey.
1. Загалом, ви можете використовувати біржу, яка йде в комплекті rabbitMQ:" (назва Біржі — це порожній рядок, далі — стандартний Обмін).
2. У цьому режимі немає потреби виконувати жодних операцій зв'язку на Exchange
3. Для обміну повідомленнями потрібен «RouteKey», який можна просто зрозуміти як назву черги, куди слід відправити.
4. Якщо ім'я черги, вказане в RouteKey, не існує у vhost, повідомлення скидається.
2. Обмін фанаутами
Будь-які повідомлення, надіслані до Fanout Exchange, пересилаються до всіх черг, пов'язаних із цією біржею.
1. Її можна розуміти як патерн таблиці маршрутизації
2. У цьому режимі не потрібен RouteKey
3. Цей режим вимагає заздалегідь прив'язати Exchange до Queue, одна біржа може зв'язати кілька черг, а одна черга — до кількох бірж.
4. Якщо біржа, що отримала повідомлення, не прив'язана до жодної черги, повідомлення скидається.
3. Обмін темами
Будь-які повідомлення, надіслані до Topic Exchange, пересилаються до всіх черг, які цікавляться темами, зазначеними в RouteKey
1. Цей шаблон є складнішим, простіше кажучи: кожна черга має свою тему, всі повідомлення мають «назву» (RouteKey), і Exchange пересилає повідомлення всім чергам, які можуть фугально співпадати з RouteKey теми.
2. Цей режим вимагає RouteKey, можливо, заздалегідь прив'язуючи Exchange і Queue.
3. Під час зв'язку вкажіть тему, яка цікавить чергу, наприклад "#.log.#", щоб показати, що черга цікавиться всіма повідомленнями, пов'язаними з журналами (повідомлення з RouteKey "MQ.log.error" буде переадресовано в чергу).
4. "#" означає 0 або кілька ключових слів, а "" — одне ключове слово. Наприклад, «log». Він може співпадати з "log.warn", але не може співпадати з "log.warn.timeout"; Але «log.#» відповідає вищезазначеному.
5. Аналогічно, якщо Exchange не знайде чергу, що відповідає RouteKey, він викине це повідомлення.
|