Interested Article - Издатель — подписчик

Издатель — подписчик ( англ. publisher-subscriber; pub/sub ) — поведенческий шаблон проектирования передачи сообщений, в котором отправители сообщений, именуемые издателями ( англ. publishers ), напрямую не привязаны программным кодом отправки сообщений к подписчикам ( англ. subscribers ). Вместо этого сообщения делятся на классы и не содержат сведений о своих подписчиках, если таковые есть. Аналогичным образом подписчики имеют дело с одним или несколькими классами сообщений, абстрагируясь от конкретных издателей.

Принципиальная схема механизма «издатель — подписчик» в DDS

Является расширением шаблона « наблюдатель », в который добавлено описание канала событий ( англ. event channel ), специально предназначенного для оповещения о событиях .

Шаблон «издатель — подписчик» наряду с близкой ему концепцией очереди сообщений содержится в арсенале средств событийно-ориентированного связующего программного обеспечения большой системы. Большинство систем передачи сообщений поддерживают в своём API как и модель «издатель — подписчик», так и очередь сообщений. Примером такой системы может быть Java Message Service (JMS) .

Этот шаблон обеспечивает большую масштабируемость и более динамичную топологию сети .

Фильтрация сообщений

В модели «издатель — подписчик» подписчики обычно получают только подмножество всех опубликованных сообщений. Процесс отбора сообщений для получения и их обработка называется фильтрацией . Существуют две основных формы фильтрации: основанная на теме ( англ. topic ) и основанная на содержимом.

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

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

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

Топология

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

Подписчики могут подписываться на определённые сообщения на этапе написания кода, во время инициализации приложения или во время выполнения. В системах с пользовательским графическим интерфейсом подписчики могут подписываться вручную с помощью команд (таких как нажатие на кнопке). Некоторые фреймворки и ПО используют для подписки конфигурационные файлы в формате XML или JSON , такие файлы читаются во время инициализации. Другие программные системы могут добавлять или удалять подписку во время выполнения, например триггеры баз данных или RSS .

Большинство распределённых систем реального времени стандарта DDS не используют брокеров. Вместо этого каждый издатель и подписчик совместно используют мета-данные друг о друге. Издатель и подписчик кэшируют эту информацию локально и маршрутизируют сообщения, основываясь на этих сведениях.

История

Впервые предложен в 1987 году на симпозиуме «Принципы операционных систем» Ассоциации вычислительной техники в докладе «Применение виртуальной синхронности в распределённых системах. 123—138» как часть новостной подсистемы Isis Toolkit.

См. также

Примечания

  1. Hohpe, G. and Woolf, B. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. — Pearson Education, 2012. — P. 106. — ISBN 9780133065107 .
  2. Birman, K. and Joseph, T. « от 13 сентября 2019 на Wayback Machine » in Proceedings of the eleventh ACM Symposium on Operating systems principles (SOSP '87) , 1987. pp. 123—138.

Литература

  • Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., & Stal, M. (1996). Pattern Oriented Software Architecture, Volume 1: A System of Patterns. John Wiley & Sons, 1996, pp. 339—343
Источник —

Same as Издатель — подписчик