< Back | Wikipedia | Home | Dark Mode


Java Message Service


A Java Message Service (roviden JMS) egy Java API, amellyel uzeneteket lehet kuldeni kulonbozo szoftverkomponensek kozott. A JEE specifikacio reszet kepezo JMS specifikaciot a Java Community Process kereteben fejlesztik a JSR 914 dokumentumban.

Az uzenetkuldest implementalo architekturakra szoktak message-oriented middleware (roviden MOM) neven is hivatkozni.

Az elosztott rendszerekben az uzenetkuldes egy ugynevezett lazan csatolt kommunikacio. Ez arra utal, hogy a szoftverkomponensek nem kozvetlenul kommunikalnak egymassal, hanem egy koztes (uzenetkezelo) komponens segitsegevel. A lazan csatoltsag egyik elonye, hogy az uzenetek kuldoinek nem is kell pontosan ismerniuk a fogadokat, mert minden kommunikacio az uzenetsoron keresztul tortenik. (Ezzel ellentetes az ugynevezett szorosan csatolt kommunikacio, ami peldaul a TCP socket-eknel, a CORBA-nal es az RMI-nel figyelheto meg.)

A JMS API ketfele modellt tamogat:

  • point-to-point modell
  • publish-subscribe modell

A point-to-point modell eseteben a producer uzeneteket kuld az uzenetsorba, a consumer pedig kiolvassa azokat a sorbol. Ebben az esetben a producer ismeri az uzenet fogadojat es kozvetlenul a fogadohoz tartozo sorba pakolja az uzenetet. Ez az eset a kovetkezokkel jellemezheto:

  • Egy uzenetet csak egy fogado kap meg.
  • A producer-nek nem kell futnia, amikor a consumer megkapja az uzenetet es a consumer-nek sem kell futnia, amikor a producer elkuldi az uzenetet.
  • Minden sikeresen kezbesitett uzenetet visszaigazol a consumer.

A publish/subscribe modell adott temahoz (angolul topic) tartozo uzenetek publikalasat tamogatja. Nulla vagy tobb subscriber regisztralhat egy-egy topic-ra. Ebben a modellben a kommunikalo felek nem ismerik egymast. Egy jo metafora ennek a szemleltetesere az anonim uzenofal. Fobb jellemzoi a kovetkezok:

  • Egy uzenetet tobb fogyaszto is megkaphat.
  • A publisher es a subscriber kozott fennall egy idobeli fuggoseg. A publisher-nek letre kell hoznia egy topic-ot, amelyre a kliensek feliratkozhatnak. A feliratkozott klienseknek folyamatosan aktivnak kell maradniuk ahhoz, hogy megkapjak az uzeneteket vagy tartos feliratkozast kell hasznalniuk (angolul durable subscription). Az utobbi esetben ujracsatlakozaskor minden uzenetet megkap a fogyaszto.

A JMS az alabbi elemeket foglalja magaba: [1]

JMS provider (magyarul szolgaltato)
A JMS szolgaltato nem mas, mint egy Message Oriented Middleware (MOM) implementacio. A szolgaltato lehet tiszta Java implementacio, de lehet nemjavas MOM implementaciohoz keszitett javas adapter is.
JMS kliens
Egy uzeneteket kuldo es/vagy fogado alkalmazas vagy folyamat.
JMS producer
Uzeneteket keszito es kuldo JMS kliens.
JMS consumer
Uzeneteket fogado (mas szoval fogyaszto) JMS kliens.
JMS message
A JMS kliensek kozott szallitott adatokat tartalmazo objektum.
JMS queue
Sor adatszerkezet, ahol az elkuldott es a kezbesitesre varo uzenetek tarolodnak. Az uzeneteket a kuldes sorrendjeben kezbesitik, a kezbesitett uzenetek torlodnek a sorbol.
JMS topic
Elosztasi mechanizmus tobb fogadonak szant uzenetekhez.

A JMS API javax.jms csomagban talalhato:

A szolgaltatohoz valo kapcsolodasra hasznalhatjak fel a kliensek ezt az interfeszt. A kodot nem kell atirni, ha megvaltozik a JMS implementacio. Adminisztratori feladat a ConnectionFactory konfiguralasa a JNDI nevterben, ahol a kliensek megtalaljak. Az uzenet tipusatol fuggoen hasznaljak a QueueConnectionFactory illetve a TopicConnectionFactory specializaciokat.

Ha megvan a ConnectionFactory, akkor letrehozhato a kapcsolat a JMS szolgaltatoval. A Connection interfesz kepviseli a kapcsolatot az alkalmazas es az uzenetkezelo szerver kozott. A kapcsolat tipusatol fuggoen lehetoseg van uzenetek kuldesere es fogadasara uzenetsoron illetve topic-on keresztul.

Uzenetek uticeljat reprezentalja. Lehet sor is es topic is egyarant. A JMS adminisztrator hozza letre ezeket az objektumokat, a szoftverkomponensek pedig a JNDI-n keresztul fedezik fel oket. A ConnectionFactory esetehez hasonloan ebbol is ketfelet lehet csinalni: sorokat a point-to-point kommunikaciohoz es temakat (topic-okat) a publish/subscribe kommunikaciohoz.

Uzenetek fogadasara alkalmas. A fogyaszto szinkron (blokkolo) es aszinkron (nem blokkolo) modon is fogadhat uzeneteket mindket uzenetkezelesi modellben.

Uzenetek kuldesere alkalmas. Konkret cimzetthez is lehet rendelni, de lehet altalanos kuldo is, amelynek mindig egy konkret uzenet kuldesekor adjak meg a cimzettet.

A termelo es a fogyaszto szoftverkomponensek kozott kuldott objektum. Az uzenet harom fo reszbol all:

  1. header (kotelezo): Operativ beallitasokat tartalmaz az uzenetek azonositasahoz es iranyitasahoz.
  2. uzenettulajdonsagok (opcionalis): Egyedi, testreszabott mezoket es szuroket tartalmazhat.
  3. uzenettest (opcionalis): Otfele uzenettipus letrehozasara alkalmas (text message, map message, bytes message, stream message es object message).

Egyszalu kontextust biztosit uzenetek kuldesere es fogadasara. Az egyszalusag itt azt jelenti, hogy az uzeneteket sorbarendezik es egyesevel kezbesitik a kuldes sorrendjeben. Tamogatja a tranzakciokat is, a kontextus kepes tarolni uzenetek egy csoportjat a tranzakcio vegrehajtasaig, azt kovetoen pedig kezbesiti oket. Ha a tranzakciot visszagorgetik (rollback), akkor a rendszer nem kezbesiti az uzeneteket. A Session segitsegevel lehet uzenetkuldoket es fogadokat letrehozni.

A JMS 2.0 a Java Community Process tartja karban JSR 343 neven.

A JMS hasznalatahoz szukseg van egy JMS szolgaltatora (provider), amely kezelni tudja a munkameneteket (session) es a sorokat (queue). Szolgaltato leteznek szabad szoftver implementaciok, nyilt forraskod implementaciok es kereskedelmi szoftverek is.

Nevezetesebb nyilt forraskodu implementaciok:

Nevezetesebb kereskedelmi implementaciok:

A kulonbozo JMS implementaciokrol kimerito osszehasonlito tablazat szerepel itt: http://www.theserverside.com/reviews/matrix.tss Archivalva 2008. augusztus 20-i datummal a Wayback Machine-ben

A Java EE specifikacionak az 1.4 verziotol kezdve resze a JMS szolgaltato.

Egyeb uzenetkezelo technologiak, amelyek nem implementaljak a JMS API-t:

Kereses Tartalomjegyzek kinyitasa/becsukasa Java Message Service 23 nyelv Uj tema nyitasa

Source: hu.wikipedia.org