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 .
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.
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.
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.