Режим публикации-подписки в шаблонах проектирования (1) Узнайте о режиме публикации-подписки в этой статье.

Шаблоны проектирования
Режим публикации-подписки в шаблонах проектирования (1) Узнайте о режиме публикации-подписки в этой статье.

содержание


Учащиеся, знакомые с ПО промежуточного слоя сообщений, должны быть знакомы с шаблоном публикации-подписки. Даже если вы ничего не знаете о промежуточном программном обеспечении для сообщений, модель публикации/подписки является очень распространенным сценарием в повседневной жизни.

Например, если вы откроете учетную запись подписки WeChat, статьи, опубликованные автором, на которого вы подписаны, будут транслироваться каждому подписчику. В этом сценарии официальная учетная запись WeChat — это Пулишер, вы — Подписчик, а статья, которую вы получаете, — это Сообщение.

Давайте узнаем вместе发布/订阅模式, Если вы хотите понять и использовать этот шаблон в своих собственных проектах или вас интересуют принципы промежуточного программного обеспечения, такого как очереди сообщений (MQ), то эта серия статей представляет собой наиболее эффективную коллекцию подробных объяснений.

Режим введения

Шаблон публикации-подписки относится к поведенческим шаблонам в шаблоне проектирования.

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

发布/订阅者模式Самой большой особенностью является реализация слабой связи, что означает, что вы можете позволить издателям публиковать сообщения, а подписчикам получать сообщения, а не искать способ соединить две отдельные системы вместе. Конечно, эта слабая связь также发布/订阅者模式Самым большим недостатком является то, что это увеличивает сложность системы из-за необходимости использования промежуточных агентов. Более того, издатель не может знать в режиме реального времени, было ли опубликованное сообщение получено каждым подписчиком, что увеличивает неопределенность системы.

发布/订阅者模式Преимущества

发布/订阅者模式Преимущества можно резюмировать следующим образом:

  1. Свободная муфта / независимость

发布/订阅者模式Многие подсистемы (Subsystems), которые должны обмениваться данными, могут быть разделены, и каждой подсистемой можно управлять независимо. И даже если некоторые подсистемы перейдут в автономный режим, это не повлияет на общее управление системными сообщениями.

发布/订阅者模式Обеспечивает разделение задач для приложений. Каждое приложение может сосредоточиться на своей основной функциональности, а инфраструктура обмена сообщениями отвечает за маршрутизацию сообщений каждому потребителю.

  1. Высокая масштабируемость/масштабируемость

发布/订阅者模式Повышенная масштабируемость системы и улучшенная скорость отклика отправителя. Причина в том, что отправитель (издатель) может быстро отправить сообщение во входной канал, а затем вернуться к своим основным обязанностям по обработке, не дожидаясь завершения обработки подсистемой. Затем инфраструктура обмена сообщениями отвечает за доставку сообщения каждому подписчику.

  1. Высокая надежность/надежность

发布/订阅者模式Повышенная надежность. Асинхронный обмен сообщениями помогает приложениям продолжать бесперебойную работу при повышенной нагрузке и может более эффективно справляться с периодическими сбоями.

  1. Гибкость

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

发布/订阅者模式Допускается отложенная обработка или обработка по расписанию. Например, когда система находится под большой нагрузкой, абоненты могут дождаться непиковых часов для получения сообщений или обрабатывать сообщения по определенному расписанию.

  1. Тестируемость

发布/订阅者模式Улучшает тестируемость. Каналы можно отслеживать, а сообщения проверять или регистрировать в рамках общей стратегии интеграционного тестирования.

выполнить发布/订阅者模式Вопросы для рассмотрения

  1. Обработка подписки

Подписчики могут подписаться или отказаться от подписки на тему в канале сообщений.

  1. Безопасность

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

  1. Фильтрация контента

Проверяйте и распространяйте сообщения на основе содержания каждого сообщения. Каждый подписчик может указать свои интересы.

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

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

  1. двусторонняя связь

Каналы в системе публикации-подписки считаются однонаправленными.

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

  1. порядок сообщений

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

Система предназначена для обеспечения эквивалентной обработки сообщений, чтобы исключить любую зависимость от порядка, в котором обрабатываются сообщения.

  1. приоритет сообщения

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

  1. токсичная информация

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

  1. повтор сообщения

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

Инфраструктура обмена сообщениями должна реализовать обнаружение дубликатов сообщений и дедупликацию (также известную как дедупликация) на основе идентификатора сообщения, чтобы обеспечить доставку не более одного сообщения.

  1. срок действия сообщения истек

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

  1. планирование сообщений

Например, сообщения могут быть временно подавлены до определенной даты и времени для обработки.

когда его следует использовать发布/订阅者模式

Если ваша программа имеет очень мало подписчиков или нуждается во взаимодействии с подсистемами в режиме реального времени, то发布/订阅者模式не подходит.

Рассмотрите возможность использования этого режима в следующих ситуациях:

  1. Приложение должно транслировать информацию большому количеству потребителей. Например, подписной аккаунт WeChat — это платформа для вещания с огромным количеством потребителей.

  2. Приложение должно взаимодействовать с одним или несколькими независимо разработанными приложениями или службами, которые могут использовать разные платформы, языки программирования и протоколы связи.

  3. Приложения могут отправлять информацию потребителям без получения ответов от потребителей в режиме реального времени.

  4. Интегрированная система предназначена для поддержки возможной модели согласованности своих данных.

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

发布/订阅者模式и观察者模式

发布/订阅者模式и观察者模式Это два шаблона проектирования, которые мы часто путаем.Можно сказать, что эти два шаблона проектирования имеют определенное сходство в поведении, но это два разных шаблона проектирования. Или发布/订阅者模式да观察者模式вариант .

Разницу между двумя шаблонами проектирования можно ясно увидеть на следующем рисунке.

发布/订阅者模式и观察者模式Основные отличия заключаются в следующем:

  1. В шаблоне наблюдателя субъект ведет список наблюдателей, поэтому субъект знает, как уведомить наблюдателей об изменении состояния. Однако в издателе/подписчике издателю и подписчику не обязательно знать друг друга. Им нужно только общаться с помощью брокеров сообщений среднего уровня (или очередей сообщений).

  2. В шаблоне издатель/подписчик компоненты полностью отделены от шаблона наблюдателя. В паттерне «Наблюдатель» субъект и наблюдатель слабо связаны.

  3. Паттерн Наблюдатель в основном реализуется синхронно, т.е. когда происходит какое-то событие, субъект вызывает соответствующие методы всех своих наблюдателей. Шаблон Publisher/Subscriber чаще всего реализуется асинхронно (с использованием очередей сообщений).

  4. Шаблон издатель/подписчик больше похож на шаблон для нескольких приложений. Издатель и подписчик могут находиться в двух разных приложениях. Каждый из них взаимодействует через брокера сообщений или очередь сообщений.

В этой статье описывается发布者/订阅者模式Связанные концепции и конкретная реализация будут подробно представлены в следующих главах.

Wechat-westcall