Режим темы в RabbitMQ похож на режим маршрутизации, но отличие состоит в том, что режим темы поддерживает маскирование для нечеткого сопоставления маршрутизации, в то время как режим маршрутизации поддерживает только точное совпадение.
Структурная диаграмма
Пояснение:
- P обозначает производителя, X - обмен, а красные Q1, Q2 обозначают очереди, C1, C2 - потребителей.
- Тип обмена - тема.
- Логика пересылки сообщений тематического обмена: Он сопоставляет ключ маршрутизации в сообщении со всеми ключами маршрутизации, связанными со всеми привязками обмена через маскирование, и если происходит совпадение, отправляет сообщение в привязанную очередь.
Совет: Различие между режимом темы и прямым режимом заключается в поддержке маскирования ключа маршрутизации для нечеткого сопоставления, в остальном все то же самое.
Маскировки, поддерживаемые темой, следующие:
-
#
(хэш) сопоставляется с одним или несколькими словами -
*
(звездочка) сопоставляется только с одним словом
Например:
Ключ маршрутизации, привязанный к очереди Q1 = *.orange.*
Ключ маршрутизации, привязанный к очереди Q2 = *.*.rabbit
и lazy.#
Если ключ маршрутизации сообщения - "quick.orange.rabbit", он совпадает с обеими очередями Q1 и Q2.
Совет: Если ключ маршрутизации не совпадает ни с одной очередью, сообщение будет отброшено. Если ключ маршрутизации пуст, он работает так же, как и режим вентилятора, и направляет сообщение напрямую во все очереди.
Сценарий использования
Как и в режиме маршрутизации, различие заключается в гибкости условий подписки, в частности в более гибких правилах сопоставления для ключа маршрутизации.