Режим темы в RabbitMQ похож на режим маршрутизации, но отличие состоит в том, что режим темы поддерживает маскирование для нечеткого сопоставления маршрутизации, в то время как режим маршрутизации поддерживает только точное совпадение.

Структурная диаграмма

Режим темы

Пояснение:

  1. P обозначает производителя, X - обмен, а красные Q1, Q2 обозначают очереди, C1, C2 - потребителей.
  2. Тип обмена - тема.
  3. Логика пересылки сообщений тематического обмена: Он сопоставляет ключ маршрутизации в сообщении со всеми ключами маршрутизации, связанными со всеми привязками обмена через маскирование, и если происходит совпадение, отправляет сообщение в привязанную очередь.

Совет: Различие между режимом темы и прямым режимом заключается в поддержке маскирования ключа маршрутизации для нечеткого сопоставления, в остальном все то же самое.

Маскировки, поддерживаемые темой, следующие:

  • # (хэш) сопоставляется с одним или несколькими словами
  • * (звездочка) сопоставляется только с одним словом

Например: Ключ маршрутизации, привязанный к очереди Q1 = *.orange.* Ключ маршрутизации, привязанный к очереди Q2 = *.*.rabbit и lazy.#

Если ключ маршрутизации сообщения - "quick.orange.rabbit", он совпадает с обеими очередями Q1 и Q2.

Совет: Если ключ маршрутизации не совпадает ни с одной очередью, сообщение будет отброшено. Если ключ маршрутизации пуст, он работает так же, как и режим вентилятора, и направляет сообщение напрямую во все очереди.

Сценарий использования

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