Bevezetés a RabbitMQ-ba

1. Áttekintés

A szoftverkomponensek leválasztása a szoftvertervezés egyik legfontosabb része. Ennek egyik módja az üzenetkezelő rendszerek használata, amelyek aszinkron módon biztosítják a kommunikációt az összetevők (szolgáltatások) között. Ebben a cikkben az egyik ilyen rendszerrel foglalkozunk: RabbitMQ.

A RabbitMQ egy üzenetközvetítő, amely az Advanced Message Queuing Protocol (AMQP) protokollt valósítja meg. Kliens könyvtárakat biztosít a főbb programozási nyelvekhez.

A szoftverkomponensek szétkapcsolása mellett a RabbitMQ használható:

  • Háttérműveletek végrehajtása
  • Aszinkron működés végrehajtása

2. Üzenetmodell

Először nézzük meg gyorsan, magas szinten az üzenetek működését.

Egyszerűen fogalmazva, kétféle alkalmazás van kölcsönhatásban egy üzenetkezelő rendszerrel: a gyártók és a fogyasztók. A termelők azok, akik üzeneteket küldenek (tesznek közzé) egy brókernek, és a fogyasztók, akik üzeneteket kapnak a brókertől. Általában ezek a programok (szoftver-alkatrészek) különböző gépeken futnak, és a RabbitMQ kommunikációs köztes szoftverként működik közöttük.

Ebben a cikkben egy egyszerű példát tárgyalunk két szolgáltatással, amelyek a RabbitMQ használatával fognak kommunikálni. Az egyik szolgáltatás üzeneteket fog közzétenni a RabbitMQ-n, a másik pedig fogyasztani fog.

3. Beállítás

Kezdetben futtassuk a RabbitMQ-t az itt található hivatalos telepítési útmutató használatával.

Természetesen a Java klienst használjuk a RabbitMQ szerverrel való interakcióhoz; ennek az ügyfélnek a Maven-függősége:

 com.rabbitmq amqp-client 4.0.0 

Miután lefuttattuk a RabbitMQ brókert a hivatalos útmutató segítségével, csatlakoznunk kell hozzá a java kliens segítségével:

ConnectionFactory gyár = new ConnectionFactory (); factory.setHost ("localhost"); Csatlakozási kapcsolat = gyár.newConnection (); Csatornacsatorna = connection.createChannel (); 

Használjuk a ConnectionFactory a szerverrel való kapcsolat beállításához gondoskodik a protokollról (AMQP) és a hitelesítésről is. Itt csatlakozunk a szerverhez helyi kiszolgáló, a gazdagép nevét a setHost funkció.

Tudjuk használni setPort a port beállításához, ha az alapértelmezett portot nem a RabbitMQ Server használja; az alapértelmezett port a RabbitMQ számára 15672:

gyár.setPort (15678);

Beállíthatjuk a felhasználónevet és a jelszót:

factory.setUsername ("user1"); factory.setPassword ("MyPassword");

Továbbá ezt a kapcsolatot fogjuk használni üzenetek közzétételéhez és felhasználásához.

4. Producer

Vegyünk egy egyszerű forgatókönyvet ahol egy webalkalmazás lehetővé teszi a felhasználók számára, hogy új termékeket adjanak hozzá egy webhelyhez. Bármely új termék hozzáadásakor e-mailt kell küldenünk az ügyfeleknek.

Először határozzunk meg egy sort:

channel.queueDeclare ("products_queue", hamis, hamis, hamis, null);

Minden alkalommal, amikor a felhasználók új terméket vesznek fel, üzenetet teszünk közzé a sorban:

String üzenet = "termék részletei"; channel.basicPublish ("", "products_queue", null, message.getBytes ());

Végül bezárjuk a csatornát és a kapcsolatot:

csatorna.zár (); kapcsolat.zár ();

Ezt az üzenetet egy másik szolgáltatás veszi fel, amely felelős az e-mailek küldéséért az ügyfeleknek.

5. Fogyasztó

Lássuk, mit tudunk megvalósítani a fogyasztói oldalon; ugyanezt a sort állítjuk be:

channel.queueDeclare ("products_queue", hamis, hamis, hamis, null);

Így határozhatjuk meg azt a fogyasztót, aki aszinkron módon dolgozza fel a várólista üzeneteit:

DefaultConsumer consumer = new DefaultConsumer (channel) {@Orride public void handleDelivery (String consumerTag, Envelope boríték, AMQP.BasicProperties tulajdonságok, bájt [] törzs) dobja az IOException {String üzenet = új String (törzs, "UTF-8"); // az üzenet feldolgozása}}; channel.basicConsume ("products_queue", true, consumer);

6. Következtetés

Ez az egyszerű cikk a RabbitMQ alapfogalmaival foglalkozott, és egy egyszerű példát tárgyalt annak használatáról.

Az oktatóanyag teljes megvalósítása megtalálható a GitHub projektben.


$config[zx-auto] not found$config[zx-overlay] not found