Üzenetsor

A Wikipédiából, a szabad enciklopédiából

Az üzenetsorok a számítástechnikában szoftvermérnöki komponensek amelyek processzus illetve egy processzuson belül lévő szálak közötti kommunikáció megvalósítására használatosak. Az üzenetsorokkal küldhetők parancsok illetve adatok.

Áttekintés[szerkesztés | forrásszöveg szerkesztése]

Az üzenetsorok aszinkron kommunikációs protokollt valósítanak meg, ami azt jelenti, hogy a küldőnek és a fogadónak nem szükséges egyszerre interakcióban lennie az üzenetsorral. Az üzenetek addig tárolódnak a sorban, amíg a fogadó nem fogadja azokat. Az üzenetsoroknak implicit vagy explicit limitjük van arra az adatmennyiségre, amely egy üzenetben továbbítható, illetve az üzenetek számára, amelyek a sorba elhelyezhetők. Számos implementációja az üzenetsorok funkcióinak megtalálható beépítve az operációs rendszerbe vagy a programba. Vannak olyan üzenetsorok amelyek rendszerspecifikusak, azaz csak egy rendszerben használhatók[1][2] [3].

Más implementációival megvalósítható a rendszerek közti üzenettovábbítás, így több alkalmazást és operációs rendszert köthetünk össze.[4] Ezek az üzenetsorok valamilyen fajta hibatűrést tartalmaznak, hogy ellenálljanak az esetleges rendszer összeomlás esetén fennálló adatvesztésnek. Példák az ilyen üzenetsorok (más néven Üzenetorientált köztesréteg) üzleti megvalósítására:

A Java tartalmaz egy az üzenetsorokhoz tartozó szabványt melynek neve JMS és létezik számos zárt forráskódú és szabad szoftver megvalósítása is.

Számos nyílt forráskódú megvalósítása létezik az üzenetorientált köztes rétegnek. Ilyenek például JBoss Messaging, JORAM, Apache ActiveMQ, Sun Open Message Queue, Apache Qpid[5], RabbitMQ, Beanstalk'd és a HTTPSQS[6] Ezek mellett elterjedőben van a hardver alapú üzenetorientált köztes réteg, olyan terjesztőkkel mint például a Solace Systems. A legtöbb valósidejű operációs rendszer (például: VxWorks, QNX) az üzenetsorok használatát javasolja a processzusok illetve a szálak közötti kommunikációra. Az így létrejövő szoros integrációnak az üzenettovábbítás és a CPU időosztása között a fő ok a valósidejű operációs rendszerek használatára a valósidejű programoknál.

Használata[szerkesztés | forrásszöveg szerkesztése]

A tipikus üzenetsor megvalósításnál a rendszergazda telepít üzenetsorozó programot (sor menedzser) és definiál egy névvel ellátott üzenetsort. Az alkalmazás ezután regisztrál egy szoftver rutint, amely figyeli az üzenetsort, hogy érkezett e új üzenet. Ezután egy másik alkalmazás vagy programszál kapcsolódhat a sorhoz és üzenetet rakhat be. A sor menedzser megőrzi a fogadott üzeneteket addig, amíg a fogadó alkalmazás nem kapcsolódik. Ezután meghívja a regisztrált szoftver rutint és a fogadó alkalmazás feldolgozza az üzenetet a megfelelő módon. Számod beállítási lehetősége van az átadott üzenetnek. Többek között:

  • Tartósság (például: a sorban lévő adatot csak a memóriában kell e tárolni, vagy ki kell írni a lemezre, vagy a sokkal megbízhatóbb (de drágább eljárás) adatbázisba kell kiírni)
  • Biztonsági beállítások - mely alkalmazások férhetnek hozzá az üzenetekhez
  • Üzenet tisztítási szabályok - a soroknak vagy üzeneteknek lehet Time to live-je
  • Néhány rendszer támogatja a szűrőket, így a feliratkozott alkalmazások csak az előre megadott feltételeknek megfelelő üzeneteket láthatja
  • Szállítási szabályok - garantálnunk kell-e, hogy az üzenet továbbítva lett legalább egyszer, vagy maximum egyszer
  • Útválasztási szabályok - egy rendszerben, ahol több sor szerver van, melyiknek kell fogadni az üzeneteket a küldőtől, és melyiknek egy másik sortól
  • Kötegelési szabályok - rögtön továbbítani kell egy üzenetet, vagy várni egy kicsit és egyszerre többet elküldeni
  • Mikor számít egy üzenet "sorba rakottnak"? Amikor egy sorban benne van már, vagy mikor már továbbítva lett legalább egy külső sornak, vagy mikor továbbítva lett az összesnek?
  • A közvetítőnek tudnia kell-e, hogy egyes fogadók megkapták az üzenetet, vagy esetleg azt, hogy mind megkapta?

Ezek mind olyan feltételek amelyek lényegesen befolyásolják a tranzakciók szemantikáját, a rendszer megbízhatóságát és hatékonyságát.

Szinkron vagy aszinkron[szerkesztés | forrásszöveg szerkesztése]

A legtöbb a jól ismert kommunikációs protokoll szinkron hívásokat használ. A világháló és a webszolgáltatások által használt HTTP protokoll kézenfekvő példa, ahol a felhasználó elküld egy weblap kérést és megvárja a választ. Azonban vannak olyan esetek, amikor a szinkron hívások nem kielégítőek a probléma megoldására. Például az AJAX (Asszinkron Javascript és XML) használható arra, hogy aszinkron módon küldjön szöveget vagy XML-t, amelynek hatására a weblap egy része frissülni fog. A Google használja ezt a technikát a pl. a Google Suggestben, amely elküldi a felhasználó által részben begépelt keresési szöveget a Google szervereknek, amelyek aztán visszaadnak számos lehetséges teljes keresési szöveget, amelyek a felhasználó által addig begépelt szöveggel kezdődnek. Ezek a szövegek aszinkron módban frissülnek ahogy a felhasználó halad előre a gépelésben. Egyéb példák az eseményorientált és a publish/subscribe rendszerekben:

  • Egy alkalmazásnak figyelmeztetnie kell egy másikat, hogy egy esemény bekövetkezett, de nem szükséges megvárnia a választ
  • A publish/subscribe rendszerekben közzétesz egy üzenetet számos kliensnek

A fenti példák egyikében sincs értelme a küldőnek megvárnia a választ, mivel mi történik akkor ha mondjuk az egyik kliens futásában hiba következik be.

Az alkalmazások a szinkron és az aszinkron módszerek közül csak az egyiket használhatják. Egy interaktív alkalmazás rögtön válaszolhat a kérésre vagy sorba rakhatja azokat, hogy később legyenek végrehajtva. Ezekben az esetekben egy olyan alrendszer, ami üzenetsorokat valósít meg, segíthet az egész rendszer teljesítményének javításában.

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

  1. Win32 system message queues. About Messages and Message Queues. Windows User Interface. Microsoft Developer Network. (Hozzáférés: 2010. április 21.)
  2. Linux and POSIX message queues. Overview of POSIX message queues at linux.die.net
  3. Using Linux Message Queues. www.civilized.com
  4. For example, the MSMQ product. Message Queuing (MSMQ). Network Communication. Microsoft Developer Network. (Hozzáférés: 2009. május 9.)
  5. Apache Qpid Project, an implementation of AMQP.
  6. HTTPSQS, an message queue based on HTTP GET/POST protocol.

Hivatkozások[szerkesztés | forrásszöveg szerkesztése]

Ez a szócikk részben vagy egészben a Message queue című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel.

Kapcsolódó szócikkek[szerkesztés | forrásszöveg szerkesztése]