Skip to content
Dávid Honfi edited this page Sep 2, 2015 · 12 revisions

Kommunikáció JMS és JMX technológia segítségével

Készítette: Hegedüs Ábel, Honfi Dávid

Bevezető és rövid ismertető

A jelen mérés során a hallgatók megismerkednek az üzenetsorok kezelésének szabványos módjával JMS segítségével. Ehhez kapcsolódóan betekintést nyernek a JMX keretrendszerbe, amely segítségével konfigurálhatóak az üzenetsorok és a JNDI címfeloldó technológiával, amellyel egyedi azonosítók alapján lehet referenciát kérni a megfelelő objektumokra (pl. üzenetsorok).

Az előző mérésen használt RabbitMQ alapú üzenetsorok hátránya, hogy az alkalmazások kizárólag az AMQP protokoll segítségével tudnak egymással kommunikálni. Ehelyett jó lenne, ha az elkészített alkalmazások tetszőleges üzenetsor kezelő keretrendszer felett futtathatóak lennének (elfedve a kommunikáció részleteit, például a protokollt). Erre ad lehetőséget a Java Message Service (JMS) szabványos alkalmazásprogramozási felület (API).

A JMS segítségével az alkalmazások képesek üzentek létrehozására, küldésére, fogadására és feldolgozására. A JMS igyekszik maximalizálni az alkalmazások hordozhatóságát különböző JMS szolgáltatók között egy adott üzenetküldő megoldásban. Segítségével megvalósítható az aszinkron és megbízható kommunikáció.

Mikor érdemes JMS API-t használni?

Egy vállalati alkalmazás szolgáltató a következő esetekben szokta az üzenetküldő APIt választani egy szorosan csatolt API helyett, ha:

  • A szolgáltató azt szeretné elérni, hogy a komponensek ne függjenek más komponensek interfészeinek információitól (pl. hogyan kommunikál), hogy könnyen kicserélhetők legyenek.
  • A szolgáltató azt szeretné, hogy az alkalmazása futni tudjon akkor is, ha nem minden komponense elérhető.
  • Az alkalmazás üzleti modellje lehetővé teszi, hogy egy komponens információkat küldjön egy másiknak majd folytassa működését anélkül, hogy azonnal választ kapna.

JMS API architektúra

Egy JMS alkalmazás következő részekből áll, ahogy az ábra is mutatja:


A leggyakrabban használt megoldások a pont-pont összeköttetés és a hirdető/feliratkozó módszer.

Lehetőség van az üzeneteket szinkron és aszinkron módon fogadni. Szinkron esetben a fogadó explicit módon lekéri az üzenetet egy „receive” metódus segítségével. Aszinkron esetben a kliens egy „message listener”-t regisztrál, amely akkor fut le, ha érkezik egy üzenet. Ilyenkor a JMS szolgáltató meghívja az „onMessage” metódust a regisztrált üzenetkezelőben.

A Java Naming and Directory Interface (JNDI) API egy könyvtár és elnevezési funkcionalitást szolgáltat Java alkalmazásokhoz.

A JMS alkalmazások alapvető építőelemei a következők: adminisztrált objektumok, kapcsolatok, munkamenetek (session), üzenettermelők (producers), üzenetfogyasztók (consumers), üzenetek. Az elemek közötti kapcsolatokat ábrázolja az alábbi ábra:

2**. ábra JMS API progranozási modell**

A kapcsolatkezelő (connection factory) olyan adminisztrált objektum, amelynek segítségével a kliensek kapcsolatot teremtenek a szolgáltatóval. A kapcsolatkezelő tartalmazza az adminisztrátor által definiált kapcsolat konfigurációs paraméterek halmazát.

Context ctx = new InitialContext();

QueueConnectionFactory queueConnectionFactory =

(QueueConnectionFactory) ctx.lookup("QueueConnectionFactory");

A mérés során a hallgatóknak át kell alakítaniuk az második mérésen készült programjukat olyan formába, hogy a folyamat egyes lépései közötti adatáramlás üzenetsorok segítségével legyen megoldva. Az összes csomópont külön Java folyamat legyen (nem csak thread), amelyek kizárólag a JMS API-n kommunikálnak, nincs központi szinkronizációs komponens. A csomópontok között tényleges adatáramlás legyen, ne csak primitív token átadás.

A következő feladatokat kell elvégezni:


A folyamat többször is futtatható legyen az JMX kezelő program használata nélkül (ne maradjon futást zavaró üzenet a sorokban).

A mérés után leadott jegyzőkönyvben szerepeljen a mérés elvégzéséhez szükséges lépések leírása megismételhető módon. Legyen benne a megvalósított folyamat rövid leírása, azok a műveletek, amelyeket az JMX felületén el kellet végezni, a létrehozott üzenetsorok és paramétereik. Szerepeljen benne az, hogy hogyan és mennyire kellett az eredeti programot megváltoztatni, hogyan valósították meg az egyes csomópont típusokat. Tartalmazzon megfelelő mennyiségű képernyőképet és útmutatót ahhoz, hogy hogyan kell lefuttatni az elkészült programot.

A beugró kérdések kizárólag ebben a dokumentumban leírtakat fogják visszakérdezni, a négy linkelt leírás a mérés elvégzéséhez szükséges pluszinformációkat tartalmazzák.

Az alábbi segédanyagok egyrészt bővebb elméleti ismereteket tartalmaznak, másrészt hasznosak lehetnek a mérés elvégzése során.

The JBoss 4 Application Server Guide 2.1 fejezet: An introduction to JMX

Java™ Message Service API Tutorial 1, 2, 3 fejezetek: Overview, Basic Programming Concepts, The JMS API Programming Model

Java Naming and Directory Interface™ Application Programming Interface 3, 4, 5 fejezetek: Overview of the Architecture, Fundamentals, Overview of the Interface

Java Message Service API Architecture, JMS Message Model, JMS Common Facilities, JMS Point-to-Point Model, JMS Example Code

Clone this wiki locally