Шаблон маршрутизации RabbitMQ в основном такой же, как шаблон публикации/подписки, с разницей в том, что шаблон публикации/подписки пересылает сообщения во все привязанные очереди, в то время как шаблон маршрутизации пересылает сообщения в очередь на основе совпадения маршрутизации.

С точки зрения конкретного кодирования разница между шаблоном маршрутизации и шаблоном публикации/подписки заключается в типе используемого обмена. Шаблон маршрутизации использует тип Direct.

Диаграмма архитектуры

Шаблон Direct

Пояснение:

  • P представляет производителя, C1 и C2 представляют потребителей, красные блоки представляют очереди, а X представляет обмен.
  • Тип обмена - direct.
  • Логика пересылки сообщений прямого обмена: сравнить ключ маршрутизации в сообщении с ключами маршрутизации, связанными со всеми привязками этого обмена. Если они равны, сообщение отправляется в очередь, соответствующую этой привязке.

Например, на приведенной выше диаграмме: Ключ маршрутизации для очереди Q1 — orange, а ключи маршрутизации для очереди Q2 — black и green. При отправке сообщения, если ключ маршрутизации сообщения orange, то оно будет перенаправлено в очередь Q1, а если ключ маршрутизации сообщения black или green, то оно будет перенаправлено в очередь Q2.

Примеры использования

Шаблон маршрутизации является расширением шаблона публикации/подписки, поэтому примеры использования похожи на шаблон публикации/подписки, за исключением возможности установки условий подписки на сообщения.

Например: На сайте электронной коммерции есть четыре склада в Восточном Китае, Южном Китае, Северном Китае и Юго-Западном Китае, на каждом из которых развернуты системы управления складом. Когда пользователь делает заказ, за доставку отвечает ближайший склад.

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

Привязки ключей маршрутизации для очередей доставки четырех систем управления складами выглядят следующим образом:

  • Восточный Китай = east
  • Северный Китай = north
  • Южный Китай = south
  • Юго-Западный Китай = west

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