Introduksjon til RabbitMQ

1. Oversikt

Frakobling av programvarekomponenter er en av de viktigste delene av programvaredesign. En måte å oppnå dette på er å bruke meldingssystemer, som gir en asynkron måte å kommunisere mellom komponenter (tjenester) på. I denne artikkelen vil vi dekke et av slike systemer: RabbitMQ.

RabbitMQ er en meldingsmegler som implementerer Advanced Message Queuing Protocol (AMQP). Det gir klientbiblioteker for store programmeringsspråk.

Foruten å bruke for frakopling av programvarekomponenter kan RabbitMQ brukes til:

  • Utfører bakgrunnsoperasjoner
  • Utfører asynkron operasjon

2. Meldingsmodell

Først, la oss se raskt på høyt nivå på hvordan meldinger fungerer.

Enkelt sagt, det er to typer applikasjoner som interagerer med et meldingssystem: produsenter og forbrukere. Produsenter er de som sender (publiserer) meldinger til en megler, og forbrukere som mottar meldinger fra megleren. Vanligvis kjører disse programmene (programvarekomponenter) på forskjellige maskiner, og RabbitMQ fungerer som en kommunikasjonsmellomvare mellom dem.

I denne artikkelen vil vi diskutere et enkelt eksempel med to tjenester som vil kommunisere ved hjelp av RabbitMQ. En av tjenestene vil publisere meldinger til RabbitMQ, og den andre vil konsumere.

3. Oppsett

For begynnelsen, la oss kjøre RabbitMQ ved hjelp av offisiell installasjonsveiledning her.

Vi bruker naturlig nok Java-klienten til å samhandle med RabbitMQ-serveren; Maven-avhengigheten for denne klienten er:

 com.rabbitmq amqp-client 4.0.0 

Etter å ha kjørt RabbitMQ-megleren ved hjelp av den offisielle guiden, må vi koble til den ved hjelp av java-klienten:

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

Vi bruker ConnectionFactory for å sette opp forbindelsen med serveren, tar den seg av protokollen (AMQP) og autentisering også. Her kobler vi til serveren på lokal vert, kan vi endre vertsnavnet ved å bruke setHost funksjon.

Vi kan bruke setPort for å angi porten hvis standardporten ikke brukes av RabbitMQ Server; standardporten for RabbitMQ er 15672:

factory.setPort (15678);

Vi kan angi brukernavn og passord:

factory.setUsername ("bruker1"); factory.setPassword ("Mitt passord");

Videre vil vi bruke denne forbindelsen til å publisere og konsumere meldinger.

4. Produsent

Tenk på et enkelt scenario der en webapplikasjon tillater brukere å legge til nye produkter på et nettsted. Når som helst når nytt produkt er lagt til, må vi sende en e-post til kundene.

La oss først definere en kø:

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

Hver gang brukere legger til et nytt produkt, vil vi publisere en melding i en kø:

Strengmelding = "produktdetaljer"; channel.basicPublish ("", "products_queue", null, message.getBytes ());

Til slutt lukker vi kanalen og forbindelsen:

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

Denne meldingen blir fortært av en annen tjeneste, som er ansvarlig for å sende e-post til kunder.

5. Forbruker

La oss se hva vi kan implementere forbrukersiden; vi skal erklære samme kø:

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

Slik definerer vi forbrukeren som vil behandle meldinger fra køen asynkront:

DefaultConsumer forbruker = ny DefaultConsumer (kanal) {@Override offentlig ugyldig handleDelivery (String consumerTag, konvoluttkonvolutt, AMQP.BasicProperties egenskaper, byte [] body) kaster IOException {Strengmelding = ny streng (body, "UTF-8"); // behandle meldingen}}; channel.basicConsume ("products_queue", true, forbruker);

6. Konklusjon

Denne enkle artikkelen dekket grunnleggende konsepter i RabbitMQ og diskuterte et enkelt eksempel ved hjelp av det.

Den fulle implementeringen av denne veiledningen finner du i GitHub-prosjektet.


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