Мамонтов, Анатолий Иванович (издатель)
- 1 year ago
- 0
- 0
Издатель — подписчик ( англ. publisher-subscriber; pub/sub ) — поведенческий шаблон проектирования передачи сообщений, в котором отправители сообщений, именуемые издателями ( англ. publishers ), напрямую не привязаны программным кодом отправки сообщений к подписчикам ( англ. subscribers ). Вместо этого сообщения делятся на классы и не содержат сведений о своих подписчиках, если таковые есть. Аналогичным образом подписчики имеют дело с одним или несколькими классами сообщений, абстрагируясь от конкретных издателей.
Является расширением шаблона « наблюдатель », в который добавлено описание канала событий ( англ. event channel ), специально предназначенного для оповещения о событиях .
Шаблон «издатель — подписчик» наряду с близкой ему концепцией очереди сообщений содержится в арсенале средств событийно-ориентированного связующего программного обеспечения большой системы. Большинство систем передачи сообщений поддерживают в своём API как и модель «издатель — подписчик», так и очередь сообщений. Примером такой системы может быть Java Message Service (JMS) .
Этот шаблон обеспечивает большую масштабируемость и более динамичную топологию сети .
В модели «издатель — подписчик» подписчики обычно получают только подмножество всех опубликованных сообщений. Процесс отбора сообщений для получения и их обработка называется фильтрацией . Существуют две основных формы фильтрации: основанная на теме ( англ. topic ) и основанная на содержимом.
В системе, основанной на теме , сообщения публикуются в «темах» или именованных логических каналах. Подписчики в таких системах будут получать все сообщения, опубликованные в темах, на которые они подписались, и все подписчики, подписавшиеся на одну и ту же тему, будут получать те же самые сообщения. Издатель отвечает за определение классов сообщений, на которые подписываются подписчики.
В системе, основанной на содержимом , сообщения доставляются подписчикам только в том случае, если атрибуты или содержимое этих сообщений допускаются подписчиком. В данной системе подписчик отвечает за классификацию сообщений.
Некоторые системы представляют собой гибрид между этими двумя системами: издатель отправляет сообщения в тему, в то время как подписчики регистрируют подписку, основанную на содержимом для одной или более тем.
Во многих реализациях шаблона издатель отправляет сообщения посреднику, который может быть брокером сообщений или шиной. В таком случае подписчики регистрируют подписку с этим брокером, осуществляющим фильтрацию. Брокер, как правило, осуществляет хранение сообщений и пересылку для маршрутизации сообщения от издателя к подписчику. Кроме того, брокер может устанавливать приоритеты сообщениям в очереди сообщений перед их маршрутизацией.
Подписчики могут подписываться на определённые сообщения на этапе написания кода, во время инициализации приложения или во время выполнения. В системах с пользовательским графическим интерфейсом подписчики могут подписываться вручную с помощью команд (таких как нажатие на кнопке). Некоторые фреймворки и ПО используют для подписки конфигурационные файлы в формате XML или JSON , такие файлы читаются во время инициализации. Другие программные системы могут добавлять или удалять подписку во время выполнения, например триггеры баз данных или RSS .
Большинство распределённых систем реального времени стандарта DDS не используют брокеров. Вместо этого каждый издатель и подписчик совместно используют мета-данные друг о друге. Издатель и подписчик кэшируют эту информацию локально и маршрутизируют сообщения, основываясь на этих сведениях.
Впервые предложен в 1987 году на симпозиуме «Принципы операционных систем» Ассоциации вычислительной техники в докладе «Применение виртуальной синхронности в распределённых системах. 123—138» как часть новостной подсистемы Isis Toolkit.