Vydavatel-odběratel (návrhový vzor)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 19. září 2017; kontroly vyžadují 7 úprav .

Vydavatel -  předplatitel nebo pub / sub je vzor chování  zasílání zpráv , ve kterém odesílatelé zpráv, nazývaní vydavatelé , nejsou přímo vázáni k předplatitelům kódem zasílání zpráv . Místo toho jsou zprávy rozděleny do tříd a neobsahují informace o jejich odběratelích, pokud existují. Podobně se předplatitelé zabývají jednou nebo více třídami zpráv a abstrahují od konkrétních vydavatelů.   

Vzor vydavatel-odběratel je rozšířením vzoru pozorovatel , který přidává popis kanálu události speciálně navrženého pro upozornění na událost [1] . 

Vzor vydavatel-odběratel je spolu se souvisejícím konceptem fronty zpráv součástí sady middlewarových nástrojů velkého systému řízené událostmi . Většina systémů zasílání zpráv podporuje ve svém rozhraní API jak model publikování-odběr, tak i frontu zpráv . Příkladem takového systému může být Java Message Service (JMS) [1] .

Tento vzor poskytuje větší škálovatelnost a dynamičtější topologii sítě .

Filtrování zpráv

V modelu vydavatel-odběratel obvykle obdrží odběratelé pouze podmnožinu všech publikovaných zpráv. Proces výběru zpráv pro příjem a zpracování se nazývá filtrování . Existují dvě hlavní formy filtrování: podle tématu a podle obsahu . 

V systému založeném na tématech jsou zprávy publikovány v "tématech" nebo pojmenovaných logických kanálech. Předplatitelé v takových systémech obdrží všechny zprávy publikované v tématech, k jejichž odběru se přihlásili, a všichni předplatitelé, kteří odebírají stejné téma, obdrží stejné zprávy. Vydavatel je odpovědný za určení tříd zpráv, které předplatitelé odebírají.

V systému založeném na obsahu jsou zprávy předplatitelům doručovány pouze tehdy, pokud jsou atributy nebo obsah těchto zpráv předplatitelem akceptovány. V tomto systému je za klasifikaci zpráv odpovědný účastník.

Některé systémy jsou hybridem mezi těmito dvěma: vydavatel posílá zprávy na téma, zatímco předplatitelé registrují předplatné založené na obsahu pro jedno nebo více témat.

Topologie

V mnoha implementacích vzoru vydavatel-odběratel posílá vydavatel zprávy prostředníkovi, kterým může být zprostředkovatel zpráv nebo sběrnice. V takovém případě si předplatitelé zaregistrují předplatné u tohoto filtrovacího brokera. Zprostředkovatel obvykle provádí ukládání a předávání zpráv, aby směroval zprávu od vydavatele k předplatiteli. Kromě toho může broker upřednostňovat zprávy ve frontě zpráv před jejich směrováním.

Předplatitelé se mohou přihlásit k odběru konkrétních zpráv v době kódování, během inicializace aplikace nebo za běhu. Na systémech s grafickým uživatelským rozhraním se mohou předplatitelé přihlásit ručně pomocí příkazů (jako je stisknutí tlačítka). Některé frameworky a software používají pro předplatné konfigurační soubory ve formátu XML nebo JSON , takové soubory se čtou během inicializace. Jiné softwarové systémy mohou přidat nebo odebrat předplatné za běhu, jako jsou spouštěče databáze nebo RSS .

Většina DDS distribuovaných systémů v reálném čase nepoužívá brokery. Místo toho každý vydavatel a předplatitel sdílejí metadata o sobě navzájem. Vydavatel a předplatitel ukládají tyto informace do místní mezipaměti a směrují zprávy na základě těchto informací.

Historie

Vzor vydavatele a předplatitele byl poprvé veřejně prezentován v roce 1987 Asociací pro výpočetní stroje (ACM) na sympoziu Operating Systems Principles Symposium na SOSP '87 v článku „Aplikace virtuální synchronizace na distribuované systémy. 123-138” [2] jako součást zpravodajského subsystému Isis Toolkit.

Viz také

Poznámky

  1. 1 2 Hohpe, G. a Woolf, B. Vzory podnikové integrace: Navrhování, vytváření a nasazování řešení pro zasílání zpráv. - Pearson Education, 2012. - S. 106. - ISBN 9780133065107 .
  2. Birman, K. a Joseph, T. „ Využití virtuální synchronie v distribuovaných systémech “ ve sborníku jedenáctého sympozia ACM o principech operačních systémů (SOSP '87) , 1987. s. 123-138.

Literatura