Публікація-підписка (шаблон проєктування)
Публікація-підписка (англ. Publish–subscribe, Pub/sub) — шаблон проєктування в архітектурі ПЗ, шаблон поведінки, що реалізує механізм передачі повідомлень, в якому відправники повідомлень, які називаються видавцями (publishers), не здійснюють пряме відправлення повідомлень приймачам, які називаються підписниками (subscribers), замість цього опубліковані повідомлення розбиваються на категорії за класами, без знання про те, яким підписникам вони мають бути прийняті і чи взагалі будуть такі підписники. Аналогічно, підписники виявляють зацікавленість в певних класах повідомлень і приймають ті повідомлення, які їх цікавлять, без знання того, які видавці їх публікують. Шаблон сприяє отриманню ПЗ з більшою масштабованістю та динамічнішою топологію мережі.
Механізм, покладений в основу Pub/sub, близький механізму черг повідомлень, який зазвичай застосовується в message-oriented middleware системах. Більшість систем передачі повідомлень підтримують у своїх API як pub/sub, так і черги повідомлень, як наприклад Java Message Service (JMS).
Фільтрація повідомлень
В моделі pub/sub, підписники зазвичай приймають лише підмножину всіх опублікованих повідомлень. Процес вибору повідомлень для прийняття та обробки називається фільтрацією. Існують дві типові форми фільтрації: що базуються на темі і що базуються на контенті.
В системах, що базується на темах, повідомлення публікуються в «теми» (іменовані логічні канали). Підписники в таких системах отримують всі повідомлення, опубліковані в теми, на які вони підписані; повідомлення передаються всім підписникам, підписаним на повідомлення теми. Відповідальність за класи повідомлень, на які можна підписуватись, покладена на видавця.
В системах, що базуються на контенті, повідомлення надаються підписникам, якщо атрибути таких повідомлень відповідають атрибутам, описаним підписником. Відповідальність за класи повідомлень, на які можна підписуватись, покладена на підписника.
Деякі системи є гібридами обох видів: видавці публікують повідомлення в теми, а підписники підписуються на кілька тем, описуючи атрибути бажаних повідомлень.
Див. також
- PubSubHubbub (реалізація pub/sub)
- RSS — добре маштабований протокол синдикації
- Atom — інший добре маштабований протокол синдикації.
- Подійно-орієнтоване програмування
- Спостерігач (шаблон проєктування)
- High-level architecture
- OMG Data Distribution Service (DDS)
- Технологія Push
- Usenet
- Internet Group Management Protocol
Зноски
Посилання
- XMPP XEP-0060: Publish-Subscribe
- Python PubSub Publish-Subscribe брокер в мові Python, для повідомлень всередині програми (не в мережі)
- The OMG DDS portal
- Приклад Publish Subscribe на C++
- radio.js — невелика JavaScript бібліотека PubSub.