Шаблон маршрутизации RabbitMQ в основном такой же, как шаблон публикации/подписки, с разницей в том, что шаблон публикации/подписки пересылает сообщения во все привязанные очереди, в то время как шаблон маршрутизации пересылает сообщения в очередь на основе совпадения маршрутизации.
С точки зрения конкретного кодирования разница между шаблоном маршрутизации и шаблоном публикации/подписки заключается в типе используемого обмена. Шаблон маршрутизации использует тип Direct.
Диаграмма архитектуры
Пояснение:
- P представляет производителя, C1 и C2 представляют потребителей, красные блоки представляют очереди, а X представляет обмен.
- Тип обмена - direct.
- Логика пересылки сообщений прямого обмена: сравнить ключ маршрутизации в сообщении с ключами маршрутизации, связанными со всеми привязками этого обмена. Если они равны, сообщение отправляется в очередь, соответствующую этой привязке.
Например, на приведенной выше диаграмме: Ключ маршрутизации для очереди Q1 — orange, а ключи маршрутизации для очереди Q2 — black и green. При отправке сообщения, если ключ маршрутизации сообщения orange, то оно будет перенаправлено в очередь Q1, а если ключ маршрутизации сообщения black или green, то оно будет перенаправлено в очередь Q2.
Примеры использования
Шаблон маршрутизации является расширением шаблона публикации/подписки, поэтому примеры использования похожи на шаблон публикации/подписки, за исключением возможности установки условий подписки на сообщения.
Например: На сайте электронной коммерции есть четыре склада в Восточном Китае, Южном Китае, Северном Китае и Юго-Западном Китае, на каждом из которых развернуты системы управления складом. Когда пользователь делает заказ, за доставку отвечает ближайший склад.
После размещения заказа пользователем и создания сообщения о заказе, мы хотим переслать сообщение в соответствующую региональную систему управления складом для обработки, что можно достичь с помощью шаблона маршрутизации.
Привязки ключей маршрутизации для очередей доставки четырех систем управления складами выглядят следующим образом:
- Восточный Китай = east
- Северный Китай = north
- Южный Китай = south
- Юго-Западный Китай = west
После размещения заказа пользователем определите, к какому региону относится адрес пользователя, вычислите ключ маршрутизации, а затем отправьте сообщение о заказе с ключом маршрутизации. Обмен прямого типа RabbitMQ перенаправит его в соответствующую очередь.