Kiadó-előfizető (tervezési minta)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2017. szeptember 19-én felülvizsgált verziótól ; az ellenőrzések 7 szerkesztést igényelnek .

A  kiadó -előfizető vagy a pub / sub egy viselkedési üzenettervezési  minta , amelyben az üzenetküldőket , az úgynevezett kiadókat , nem köti közvetlenül az előfizetőkhöz az üzenetküldési kód . Ehelyett az üzenetek osztályokra vannak osztva, és nem tartalmaznak információkat az előfizetőikről, ha vannak ilyenek. Hasonlóképpen, az előfizetők az üzenetek egy vagy több osztályával foglalkoznak, elvonatkoztatva bizonyos kiadóktól.   

A kiadó-előfizető minta a megfigyelő minta kiterjesztése, amely egy kifejezetten eseményértesítésre tervezett eseménycsatorna leírását ad hozzá [1] . 

A kiadó-előfizető minta az üzenetsor kapcsolódó koncepciójával együtt egy nagy rendszer eseményvezérelt köztes szoftver eszközkészletének része . A legtöbb üzenetküldő rendszer támogatja a közzétételi-előfizetési modellt és az üzenetsort is az API -jában. Ilyen rendszer például a Java Message Service (JMS) [1] .

Ez a minta nagyobb méretezhetőséget és dinamikusabb hálózati topológiát biztosít .

Üzenetszűrés

A kiadó-előfizető modellben az előfizetők általában az összes közzétett üzenetnek csak egy részét kapják meg. A fogadandó üzenetek kiválasztásának és feldolgozásának folyamatát szűrésnek nevezzük . A szűrésnek két fő formája van: téma alapú és tartalom alapú . 

Egy témaalapú rendszerben az üzenetek "témákban" vagy elnevezett logikai csatornákban kerülnek közzétételre. Az ilyen rendszerek előfizetői az általuk előfizetett témákban megjelent összes üzenetet megkapják, és minden előfizető, aki ugyanarra a témára iratkoz fel, ugyanazokat az üzeneteket kapja. A kiadó felelős azért, hogy meghatározza azokat az üzenetosztályokat, amelyekre az előfizetők előfizetnek.

A tartalom alapú rendszerben az üzenetek csak akkor jutnak el az előfizetőkhöz, ha az üzenetek tulajdonságait vagy tartalmát az előfizető elfogadja. Ebben a rendszerben az előfizető feladata az üzenetek osztályozása.

Egyes rendszerek a kettő hibridjei : a kiadó üzeneteket küld egy témához, míg az előfizetők tartalomalapú előfizetést regisztrálnak egy vagy több témára.

Topológia

A kiadó-előfizető minta számos megvalósításában a kiadó üzeneteket küld egy közvetítőnek, amely lehet üzenetközvetítő vagy busz. Ilyen esetben az előfizetők előfizetést regisztrálnak ennél a szűrési közvetítőnél. A közvetítő általában üzenettárolást és továbbítást végez, hogy az üzenetet a kiadótól az előfizetőhöz irányítsa. Ezen túlmenően a közvetítő az üzenetek továbbítása előtt prioritást adhat az üzenetsorban.

Az előfizetők előfizethetnek bizonyos üzenetekre a kódoláskor, az alkalmazás inicializálása során vagy futási időben. A grafikus felhasználói felülettel rendelkező rendszereken az előfizetők parancsokkal (például gombnyomással) manuálisan is előfizethetnek. Egyes keretrendszerek és szoftverek XML vagy JSON formátumú konfigurációs fájlokat használnak az előfizetéshez , ezeket a fájlokat a rendszer az inicializálás során olvassa be. Más szoftverrendszerek futás közben hozzáadhatnak vagy eltávolíthatnak előfizetést, például adatbázis-triggereket vagy RSS -t .

A legtöbb DDS elosztott valós idejű rendszer nem használ közvetítőket. Ehelyett minden kiadó és előfizető metaadatokat oszt meg egymással. A kiadó és az előfizető ezeket az információkat helyileg gyorsítótárazza, és ezen információk alapján továbbítja az üzeneteket.

Történelem

A kiadó-előfizető mintát először 1987-ben mutatta be nyilvánosan az Association for Computing Machinery (ACM) a SOSP '87 Operating Systems Principles Symposium rendezvényén, a „Virtuális szinkron alkalmazása elosztott rendszerekre” című cikkében. 123-138” [2] az Isis Toolkit híralrendszer részeként.

Lásd még

Jegyzetek

  1. 1 2 Hohpe, G. és Woolf, B. Vállalati integrációs minták: Üzenetküldési megoldások tervezése, építése és telepítése. - Pearson Education, 2012. - P. 106. - ISBN 9780133065107 .
  2. Birman, K. és Joseph, T. " A virtuális szinkron kihasználása elosztott rendszerekben " a Proceedings of the 11th ACM Symposium on Operating Systems Principles (SOSP '87) , 1987. pp. 123-138.

Irodalom