содержание
发布/订阅者模式
Преимущества- выполнить
发布/订阅者模式
Необходимо рассмотреть - когда его следует использовать
发布/订阅者模式
发布/订阅者模式
и观察者模式
Учащиеся, знакомые с ПО промежуточного слоя сообщений, должны быть знакомы с шаблоном публикации-подписки. Даже если вы ничего не знаете о промежуточном программном обеспечении для сообщений, модель публикации/подписки является очень распространенным сценарием в повседневной жизни.
Например, если вы откроете учетную запись подписки WeChat, статьи, опубликованные автором, на которого вы подписаны, будут транслироваться каждому подписчику. В этом сценарии официальная учетная запись WeChat — это Пулишер, вы — Подписчик, а статья, которую вы получаете, — это Сообщение.
Давайте узнаем вместе发布/订阅模式
, Если вы хотите понять и использовать этот шаблон в своих собственных проектах или вас интересуют принципы промежуточного программного обеспечения, такого как очереди сообщений (MQ), то эта серия статей представляет собой наиболее эффективную коллекцию подробных объяснений.
Режим введения
Шаблон публикации-подписки относится к поведенческим шаблонам в шаблоне проектирования.
В программной архитектуре публикация/подписка представляет собой парадигму сообщения: отправитель сообщения (называемый издателем) не отправляет сообщение непосредственно конкретному получателю (называемому подписчиком), а передает его через канал сообщений. подпишитесь, чтобы изменить тему сообщения, потребляйте его.
发布/订阅者模式
Самой большой особенностью является реализация слабой связи, что означает, что вы можете позволить издателям публиковать сообщения, а подписчикам получать сообщения, а не искать способ соединить две отдельные системы вместе. Конечно, эта слабая связь также发布/订阅者模式
Самым большим недостатком является то, что это увеличивает сложность системы из-за необходимости использования промежуточных агентов. Более того, издатель не может знать в режиме реального времени, было ли опубликованное сообщение получено каждым подписчиком, что увеличивает неопределенность системы.
发布/订阅者模式
Преимущества
发布/订阅者模式
Преимущества можно резюмировать следующим образом:
- Свободная муфта / независимость
发布/订阅者模式
Многие подсистемы (Subsystems), которые должны обмениваться данными, могут быть разделены, и каждой подсистемой можно управлять независимо. И даже если некоторые подсистемы перейдут в автономный режим, это не повлияет на общее управление системными сообщениями.
发布/订阅者模式
Обеспечивает разделение задач для приложений. Каждое приложение может сосредоточиться на своей основной функциональности, а инфраструктура обмена сообщениями отвечает за маршрутизацию сообщений каждому потребителю.
- Высокая масштабируемость/масштабируемость
发布/订阅者模式
Повышенная масштабируемость системы и улучшенная скорость отклика отправителя. Причина в том, что отправитель (издатель) может быстро отправить сообщение во входной канал, а затем вернуться к своим основным обязанностям по обработке, не дожидаясь завершения обработки подсистемой. Затем инфраструктура обмена сообщениями отвечает за доставку сообщения каждому подписчику.
- Высокая надежность/надежность
发布/订阅者模式
Повышенная надежность. Асинхронный обмен сообщениями помогает приложениям продолжать бесперебойную работу при повышенной нагрузке и может более эффективно справляться с периодическими сбоями.
- Гибкость
Вам не нужно заботиться о том, как различные компоненты сочетаются друг с другом, если они используют общий протокол.
发布/订阅者模式
Допускается отложенная обработка или обработка по расписанию. Например, когда система находится под большой нагрузкой, абоненты могут дождаться непиковых часов для получения сообщений или обрабатывать сообщения по определенному расписанию.
- Тестируемость
发布/订阅者模式
Улучшает тестируемость. Каналы можно отслеживать, а сообщения проверять или регистрировать в рамках общей стратегии интеграционного тестирования.
выполнить发布/订阅者模式
Вопросы для рассмотрения
- Обработка подписки
Подписчики могут подписаться или отказаться от подписки на тему в канале сообщений.
- Безопасность
Подключения к любому каналу сообщений должны быть ограничены политиками безопасности, чтобы предотвратить прослушивание неавторизованными пользователями или приложениями.
- Фильтрация контента
Проверяйте и распространяйте сообщения на основе содержания каждого сообщения. Каждый подписчик может указать свои интересы.
Подписчики обычно заинтересованы только в подмножестве сообщений, распространяемых издателем. Службы обмена сообщениями обычно позволяют подписчикам сузить набор сообщений, получаемых следующими пользователями.
Подумайте о том, чтобы позволить подписчикам подписываться на несколько тем с помощью подстановочных знаков. Каждая тема имеет выделенный выходной канал, и каждый потребитель может подписаться на все связанные темы.
- двусторонняя связь
Каналы в системе публикации-подписки считаются однонаправленными.
Если конкретному подписчику необходимо отправить подтверждение или статус связи издателю, рассмотрите возможность использования шаблона запрос/ответ. Этот шаблон использует один канал для отправки сообщений подписчику и отдельный канал ответа для связи с издателем.
- порядок сообщений
Порядок, в котором сообщения получены экземплярами-потребителями, не обязательно гарантируется и не обязательно отражает порядок, в котором сообщения были созданы.
Система предназначена для обеспечения эквивалентной обработки сообщений, чтобы исключить любую зависимость от порядка, в котором обрабатываются сообщения.
- приоритет сообщения
Для некоторых решений может потребоваться обработка сообщений в определенном порядке. Шаблон приоритетной очереди обеспечивает механизм, обеспечивающий доставку одних сообщений раньше других.
- токсичная информация
Неверные сообщения или задачи, требующие доступа к недоступным ресурсам, могут привести к сбою экземпляров службы. Система должна предотвращать возврат таких сообщений в очередь, что может привести к сбою системы.
- повтор сообщения
Одно и то же сообщение может быть отправлено несколько раз. Например, отправитель может иметь исключение после публикации сообщения, не записывая, что он успешно отправил сообщение, а затем может запуститься новый экземпляр отправителя и повторить сообщение.
Инфраструктура обмена сообщениями должна реализовать обнаружение дубликатов сообщений и дедупликацию (также известную как дедупликация) на основе идентификатора сообщения, чтобы обеспечить доставку не более одного сообщения.
- срок действия сообщения истек
Сообщения могут иметь ограниченное время жизни. Если он не будет обработан в течение этого времени, он может больше не иметь ценности и должен быть отброшен. Отправитель может указать срок действия как часть данных в сообщении. Получатель может проверить эту информацию, чтобы убедиться, что срок действия сообщения не истек, прежде чем принять решение о выполнении бизнес-логики, связанной с сообщением.
- планирование сообщений
Например, сообщения могут быть временно подавлены до определенной даты и времени для обработки.
когда его следует использовать发布/订阅者模式
Если ваша программа имеет очень мало подписчиков или нуждается во взаимодействии с подсистемами в режиме реального времени, то发布/订阅者模式
не подходит.
Рассмотрите возможность использования этого режима в следующих ситуациях:
-
Приложение должно транслировать информацию большому количеству потребителей. Например, подписной аккаунт WeChat — это платформа для вещания с огромным количеством потребителей.
-
Приложение должно взаимодействовать с одним или несколькими независимо разработанными приложениями или службами, которые могут использовать разные платформы, языки программирования и протоколы связи.
-
Приложения могут отправлять информацию потребителям без получения ответов от потребителей в режиме реального времени.
-
Интегрированная система предназначена для поддержки возможной модели согласованности своих данных.
-
Приложению необходимо передать информацию нескольким потребителям, у которых могут быть другие требования к доступности или планы времени безотказной работы, чем у отправителя. Например, ваше сообщение публикуется утром, а потребитель планирует обработать эти сообщения днем.
发布/订阅者模式
и观察者模式
发布/订阅者模式
и观察者模式
Это два шаблона проектирования, которые мы часто путаем.Можно сказать, что эти два шаблона проектирования имеют определенное сходство в поведении, но это два разных шаблона проектирования. Или发布/订阅者模式
да观察者模式
вариант .
Разницу между двумя шаблонами проектирования можно ясно увидеть на следующем рисунке.
发布/订阅者模式
и观察者模式
Основные отличия заключаются в следующем:
-
В шаблоне наблюдателя субъект ведет список наблюдателей, поэтому субъект знает, как уведомить наблюдателей об изменении состояния. Однако в издателе/подписчике издателю и подписчику не обязательно знать друг друга. Им нужно только общаться с помощью брокеров сообщений среднего уровня (или очередей сообщений).
-
В шаблоне издатель/подписчик компоненты полностью отделены от шаблона наблюдателя. В паттерне «Наблюдатель» субъект и наблюдатель слабо связаны.
-
Паттерн Наблюдатель в основном реализуется синхронно, т.е. когда происходит какое-то событие, субъект вызывает соответствующие методы всех своих наблюдателей. Шаблон Publisher/Subscriber чаще всего реализуется асинхронно (с использованием очередей сообщений).
-
Шаблон издатель/подписчик больше похож на шаблон для нескольких приложений. Издатель и подписчик могут находиться в двух разных приложениях. Каждый из них взаимодействует через брокера сообщений или очередь сообщений.
В этой статье описывается发布者/订阅者模式
Связанные концепции и конкретная реализация будут подробно представлены в следующих главах.