Introduktion til RabbitMQ

1. Oversigt

Afkobling af softwarekomponenter er en af ​​de vigtigste dele af softwaredesign. En måde at opnå dette på er at bruge messaging-systemer, der giver en asynkron måde at kommunikere mellem komponenter (tjenester) på. I denne artikel vil vi dække et af sådanne systemer: RabbitMQ.

RabbitMQ er en meddelelsesmægler, der implementerer Advanced Message Queuing Protocol (AMQP). Det giver klientbiblioteker til større programmeringssprog.

Udover at bruge til afkobling af softwarekomponenter kan RabbitMQ bruges til:

  • Udfører baggrundsoperationer
  • Udfører asynkron handling

2. Beskedmodel

Lad os først se et hurtigt, højt niveau på, hvordan messaging fungerer.

Kort sagt, der er to slags applikationer, der interagerer med et messaging-system: producenter og forbrugere. Producenter er dem, der sender (offentliggør) meddelelser til en mægler, og forbrugere, der modtager meddelelser fra mægleren. Normalt kører disse programmer (softwarekomponenter) på forskellige maskiner, og RabbitMQ fungerer som en kommunikationsmellemware mellem dem.

I denne artikel vil vi diskutere et simpelt eksempel med to tjenester, der kommunikerer ved hjælp af RabbitMQ. En af tjenesterne offentliggør meddelelser til RabbitMQ, og den anden vil forbruge.

3. Opsætning

Lad os i begyndelsen køre RabbitMQ ved hjælp af den officielle installationsvejledning her.

Vi bruger naturligvis Java-klienten til at interagere med RabbitMQ-serveren; Maven-afhængigheden for denne klient er:

 com.rabbitmq amqp-klient 4.0.0 

Efter at have kørt RabbitMQ-mægleren ved hjælp af den officielle guide, skal vi oprette forbindelse til den ved hjælp af java-klienten:

ConnectionFactory fabrik = ny ConnectionFactory (); factory.setHost ("localhost"); Forbindelsesforbindelse = fabrik.newConnection (); Channel channel = connection.createChannel (); 

Vi bruger ConnectionFactory for at indstille forbindelsen til serveren tager det også sig af protokollen (AMQP) og godkendelsen. Her opretter vi forbindelse til serveren lokal vært, kan vi ændre værtsnavnet ved hjælp af setHost fungere.

Vi kan bruge setPort at indstille porten, hvis standardporten ikke bruges af RabbitMQ-serveren; standardporten til RabbitMQ er 15672:

factory.setPort (15678);

Vi kan indstille brugernavn og adgangskode:

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

Yderligere vil vi bruge denne forbindelse til at publicere og forbruge meddelelser.

4. Producent

Overvej et simpelt scenario hvor en webapplikation giver brugerne mulighed for at tilføje nye produkter til et websted. Når som helst nyt produkt tilføjet, skal vi sende en e-mail til kunderne.

Lad os først definere en kø:

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

Hver gang brugere tilføjer et nyt produkt, offentliggør vi en besked i en kø:

Strengmeddelelse = "produktoplysninger"; channel.basicPublish ("", "products_queue", null, message.getBytes ());

Endelig lukker vi kanalen og forbindelsen:

channel.close (); connection.close ();

Denne meddelelse forbruges af en anden tjeneste, som er ansvarlig for at sende e-mails til kunder.

5. Forbruger

Lad os se, hvad vi kan implementere forbrugersiden; vi erklærer den samme kø:

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

Sådan definerer vi forbrugeren, der behandler meddelelser fra køen asynkront:

DefaultConsumer forbruger = ny DefaultConsumer (kanal) {@Override offentlig ugyldig handleDelivery (String forbrugerTag, konvolutkonvolut, AMQP.BasicProperties egenskaber, byte [] body) kaster IOException {String meddelelse = ny streng (body, "UTF-8"); // behandle meddelelsen}}; channel.basicConsume ("products_queue", true, forbruger);

6. Konklusion

Denne enkle artikel dækkede grundlæggende begreber i RabbitMQ og diskuterede et simpelt eksempel ved hjælp af det.

Den fulde implementering af denne vejledning kan findes i GitHub-projektet.