Üzenetküldés a tavaszi AMQP-vel
1. Áttekintés
Ebben az oktatóanyagban az AMQP-n keresztüli üzenetalapú kommunikációt tárjuk fel a tavaszi AMQP keretrendszer használatával. Először kitérünk az üzenetküldés néhány kulcsfontosságú fogalmára. Ezután áttérünk egy gyakorlati példára.
2. Üzenetalapú kommunikáció
Az üzenetküldés az alkalmazások közötti kommunikáció technikája. Aszinkron üzenetátadásra támaszkodik a szinkron kérés válasz-alapú architektúra helyett. Az üzenetek előállítóit és fogyasztóit az üzenetközvetítő néven ismert közbenső üzenetküldési réteg választja el. Az üzenetközvetítő olyan szolgáltatásokat nyújt, mint az üzenetek tartós tárolása, az üzenetszűrés és az üzenetátalakítás.
Java-ban írt alkalmazások közötti üzenetküldés esetén általában a JMS (Java Message Service) API-t használják. A különböző gyártók és platformok közötti interoperabilitás érdekében nem tudjuk használni a JMS klienseit és brókereit. Itt jön jól az AMQP.
3. AMQP - Advanced Message Queuing Protocol
Az AMQP egy nyílt szabványos vezetékes specifikáció az aszinkron üzenetkommunikációhoz. Leírást ad arról, hogyan kell egy üzenetet felépíteni.
3.1. Miben különbözik az Amqp a JMS-től
Mivel az AMQP platform-semleges bináris protokoll-szabvány, a könyvtárak különböző programozási nyelveken írhatók, és különböző környezetekben futtathatók.
Nincs szállító alapú protokollzár, mint például az egyik JMS-közvetítőtől a másikig történő áttérés esetén. További részletek: JMS vs AMQP és Az AMQP megértése. Néhány széles körben használt AMQP bróker a RabbitMQ, OpenAMQ és StormMQ.
3.2. AMQP entitások
Röviden: az AMQP tőzsdékből, várólistákból és kötésekből áll:
- Cserék olyanok, mint a postahivatalok vagy a postaládák, és az ügyfelek üzenetet tesznek közzé egy AMQP központban. Négy beépített cseretípus létezik
- Közvetlen csere - Üzeneteket irányít egy sorba a teljes útválasztási kulcs összeegyeztetésével
- Fanout Exchange - Üzeneteket irányít az összes hozzá kötött sorba
- Témacsere - Üzeneteket továbbít több sorba úgy, hogy egy útválasztási kulcsot egy mintához illeszt
- Fejlécek cseréje - Üzenetek továbbítása üzenetfejlécek alapján
- Sorok útválasztókulcs segítségével kapcsolódnak egy központhoz
- üzenetek útválasztó kulccsal egy központba küldik. A központ ezután az üzenetek másolatait sorokban terjeszti
További részletekért olvassa el az AMQP koncepciókat és az útválasztási topológiákat.
3.3. Tavaszi AMQP
A tavaszi AMQP két modult tartalmaz: tavasz-amqp és tavaszi nyúl. Ezek a modulok együtt absztrakciókat nyújtanak:
- AMQP entitások - az Üzenet, várólista, kötés és csere osztályok
- Kapcsolatkezelés - a RabbitMQ alkuszhoz kapcsolódunk a CachingConnectionFactory
- Üzenetkiadás - a RabbitTemplate üzeneteket küldeni
- Üzenetfogyasztás - a @RabbitListener üzeneteket olvasni egy sorból
4. Állítson be egy Rabbitmq Brokert
Szükségünk van egy RabbitMQ brókerre, amelyhez csatlakozhatunk. Ennek legegyszerűbb módja, ha a Docker segítségével lekérünk és futtatunk egy RabbitMQ képet:
docker futtatás -d -p 5672: 5672 -p 15672: 15672 - neve nyulam nyúlmq: 3-menedzsment
Kitesszük az 5672-es portot, hogy alkalmazásunk csatlakozni tudjon a RabbitMQ-hoz.
És kitesszük az 15672-es portot, hogy láthassuk, mit csinál a RabbitMQ brókerünk a kezelői felhasználói felületen keresztül: // localhost: 15672 vagy a HTTP API: //localhost:15672/api/index.html.
5. A tavaszi Amqp alkalmazásunk létrehozása
Tehát most hozzuk létre az alkalmazást egy egyszerű „Hello, világ!” Küldésére és fogadására. üzenetet a Spring AMQP használatával.
5.1. Maven-függőségek
A tavasz-amqp és tavaszi nyúl modulokat a projektünkhöz, hozzáadjuk a spring-boot-starter-amqp függőség a mi pom.xml:
org.springframework.boot spring-boot-starter-amqp 2.2.2. KÖZLEMÉNY
A legújabb verziót itt találjuk: Maven Central.
5.2. Csatlakozás a Rabbitmq brókerünkhöz
A Spring Boot automatikus konfigurációját használjuk a létrehozáshoz ConnectionFactory, RabbitTemplate, és RabbitAdmin bab. Ennek eredményeként kapcsolatot kapunk RabbitMQ brókerünkkel az 5672-es porton az alapértelmezett felhasználói név és jelszó felhasználásával. Tehát csak feljegyezzük alkalmazásunkat @SpringBootApplication:
@SpringBootApplication public class HelloWorldMessageApp {// ...}
5.3. Hozza létre a várólistánkat
A várólista létrehozása érdekében egyszerűen meghatározunk egy típusú babot Sor.RabbitAdmin megtalálja ezt és összekapcsolja az alapértelmezett cserével egy „myQueue” útválasztó kulccsal:
@Bean public Queue myQueue () {return new Queue ("myQueue", hamis); }
A várólistát nem tartósnak állítjuk be, így a RabbitMQ leállításakor a sor és a rajta lévő üzenetek eltávolításra kerülnek. Ne feledje azonban, hogy alkalmazásunk újraindítása nincs hatással a sorra.
5.4. Küldje el üzenetünket
Nézzük használja a RabbitTemplate küldeni a "Hello, világ!" üzenet:
rabbitTemplate.convertAndSend ("myQueue", "Hello, világ!");
5.5. Fogyassza az üzenetünket
Az üzenetfogyasztót úgy valósítjuk meg, hogy egy metódussal jelöljük a @RabbitListener:
@RabbitListener (queues = "myQueue") public void listen (String in) {System.out.println ("Üzenet olvasva a myQueue-ból:" + be); }
6. Alkalmazásunk futtatása
Először elindítjuk a RabbitMQ brókert:
docker futtatás -d -p 5672: 5672 -p 15672: 15672 - név nyúl nyúlmq: 3-menedzsment
Ezután futtatjuk a tavaszi rendszerindító alkalmazást HelloWorldMessage.java, végrehajtva a fő() módszer:
mvn spring-boot: futtassa -Dstart-class = com.baeldung.springamqp.simple.HelloWorldMessageApp
Amíg az alkalmazás fut, látni fogjuk, hogy:
- Az alkalmazás üzenetet küld az alapértelmezett központnak, a „myQueue” mint útválasztási kulcs
- Ezután a „myQueue” sor fogadja az üzenetet
- Végül a hallgat metódus elfogyasztja a „myQueue” üzenetet, és kinyomtatja a konzolra
Használhatjuk a RabbitMQ kezelő oldalt is // localhost: 15672 hogy üzenetünket elküldték és elfogyasztották.
7. Következtetés
Ebben az oktatóanyagban az AMQP protokollon keresztüli üzenetküldés-alapú architektúrát ismertettük, az alkalmazások közötti kommunikációhoz a Spring AMQP-t használva.
Az oktatóanyag teljes forráskódja és összes kódrészlete elérhető a GitHub projektben.