Шаблон "издатель-подписчик" означает, что сообщение, отправленное производителем, будет получено несколькими потребителями. Поскольку сообщение будет потребляться и обрабатываться несколькими потребителями, его также называют шаблоном "широковещательная передача" или "один ко многим".
Примечание: Поскольку RabbitMQ реализует шаблон "издатель-подписчик" с использованием типа обмена fanout, его также называют шаблоном "рассылки".
Диаграмма архитектуры
Пояснение:
- P обозначает производителя, C1 и C2 обозначают потребителей, красный цвет обозначает очереди, а X - обмен.
- Обмен отвечает за пересылку сообщений во все очереди, привязанные к обмену.
- Можно определить несколько очередей, каждая привязана к одному и тому же обмену.
- У каждой очереди может быть один или несколько потребителей.
Совет: В одной очереди сообщение может обрабатываться только одним потребителем. Суть того, как шаблон "рассылки" может достигнуть широковещательной передачи сообщений, заключается в нескольких очередях сообщений.
Применение
Шаблон "издатель-подписчик" - это широко используемый шаблон потребления "один ко многим". Например, после размещения заказа в интернет-магазине генерируется сообщение о заказе. Модуль склада подписывается на сообщение о заказе для обработки отгрузок, модуль уведомлений подписывается на сообщение о заказе для отправки текстовых сообщений, модуль бонусов подписывается на сообщение о заказе для обработки бонусных баллов и т. д. Путем подписки на сообщения по мере необходимости достигается расширение бизнеса, это низко-связанный шаблон проектирования.