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

Примечание: Поскольку RabbitMQ реализует шаблон "издатель-подписчик" с использованием типа обмена fanout, его также называют шаблоном "рассылки".

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

fanout pattern

Пояснение:

  • P обозначает производителя, C1 и C2 обозначают потребителей, красный цвет обозначает очереди, а X - обмен.
  • Обмен отвечает за пересылку сообщений во все очереди, привязанные к обмену.
  • Можно определить несколько очередей, каждая привязана к одному и тому же обмену.
  • У каждой очереди может быть один или несколько потребителей.

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

Применение

Шаблон "издатель-подписчик" - это широко используемый шаблон потребления "один ко многим". Например, после размещения заказа в интернет-магазине генерируется сообщение о заказе. Модуль склада подписывается на сообщение о заказе для обработки отгрузок, модуль уведомлений подписывается на сообщение о заказе для отправки текстовых сообщений, модуль бонусов подписывается на сообщение о заказе для обработки бонусных баллов и т. д. Путем подписки на сообщения по мере необходимости достигается расширение бизнеса, это низко-связанный шаблон проектирования.