RabbitMQ-viestintä ja asynkroniset järjestelmät · Oppitunti

Pysyvät viestit ja jonot

Ymmärtäkää, miten viesteistä ja jonoista tehdään pysyviä, jotta ne säilyvät välittäjän uudelleenkäynnistyksen yli. Varmistakaa, etteivät tärkeät tietonne katoa edes epävakaissa ympäristöissä.

Oppitunti 1/411 vaihetta

Pysyvät viestit ja jonot on ilmainen RabbitMQ-viestintä ja asynkroniset järjestelmät-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu RabbitMQ-viestintä ja asynkroniset järjestelmät-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. RabbitMQ-viestintä ja asynkroniset järjestelmät-kurssilla on yhteensä 4 oppituntia.

Miksi pysyvyys on tärkeää

Kuvitellaan, että RabbitMQ-välittäjä käynnistyy yhtäkkiä uudelleen. Mitä tapahtuu määrittämillesi viesteille ja jonoille?

Oletusarvoisesti monet asiat ovat väliaikaisia. Jos välittäjä kaatuu tai käynnistyy uudelleen, ei-pysyvät viestit ja ei-kestävät jonot voivat kadota pysyvästi. Tässä kohtaa pysyvyys tulee mukaan.

Pysyvyys varmistaa, että tärkeät tiedot – jonot ja viestit – säilyvät välittäjän uudelleenkäynnistyksen yli, mikä tekee viestintäjärjestelmästä vankan ja luotettavan.

Jonojen tekeminen kestäviksi

Luotettavuuden ensimmäinen askel on tehdä jonoista kestäviä. Kestävä jono säilyy RabbitMQ-välittäjän uudelleenkäynnistyksen yli.

Kun jono ilmoitetaan, sille välitetään durable-parametri. Arvon true asettaminen kertoo RabbitMQ:lle, että jonon määritys tallennetaan levylle.

  • Kestävä: Jonon määritys tallennetaan ja se säilyy uudelleenkäynnistyksissä.
  • Ei-kestävä: Jonon määritys menetetään uudelleenkäynnistyksessä.

Muistakaa, että kun jono on ilmoitettu kestäväksi tai ei-kestäväksi, sen kestävyyttä ei voi muuttaa myöhemmin poistamatta ja luomatta jonoa uudelleen.

Koodi: kestävän jonon ilmoittaminen

Näin ilmoitatte kestävän jonon Javassa. Huomatkaa true kutsun queueDeclare toisena parametrina.

Kokeilkaa suorittaa tämä! Vaikka pysäyttäisitte RabbitMQ:n ja käynnistäisitte sen uudelleen, jono nimeltä 'my_durable_queue' on edelleen olemassa.

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class DeclareDurableQueue {
  private final static String QUEUE_NAME = "my_durable_queue";

  public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    try (Connection connection = factory.newConnection();
         Channel channel = connection.createChannel()) {
      
      // Declare a durable queue
      channel.queueDeclare(QUEUE_NAME, true, false, false, null);
      System.out.println("Queue '" + QUEUE_NAME + "' declared as durable.");
    }
  }
}

Viestien pysyvyyden ymmärtäminen

Vaikka jono olisi kestävä, siihen lähetettyjä viestejä ei tallenneta automaattisesti levylle. Jotta viestit säilyisivät välittäjän uudelleenkäynnistyksen yli, ne on myös merkittävä pysyviksi.

Kun viesti on pysyvä, RabbitMQ kirjoittaa sen levylle heti vastaanotettuaan sen, ennen kuin se toimittaa viestin kuluttajille.

Näin varmistetaan, että jos välittäjä kaatuu, viesti voidaan palauttaa levyltä välittäjän käynnistyessä uudelleen.

Koodi: pysyvän viestin lähettäminen

Pysyvän viestin lähettämiseksi deliveryMode-asetukseksi on määritettävä 2 (mikä tarkoittaa pysyvää) tai käyttää kätevyyden vuoksi asetusta MessageProperties.PERSISTENT_TEXT_PLAIN.

Suorittakaa tämä tuottaja ja yrittäkää sitten käynnistää RabbitMQ-välittäjä uudelleen. Uudelleenkäynnistyksen jälkeen viestin pitäisi edelleen saapua, kun suoritatte kuluttajan!

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;

public class SendPersistentMessage {
  private final static String QUEUE_NAME = "my_durable_queue";

  public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    try (Connection connection = factory.newConnection();
         Channel channel = connection.createChannel()) {
      
      // Ensure the queue is durable first
      channel.queueDeclare(QUEUE_NAME, true, false, false, null);

      String message = "Hello, persistent world!";
      // Mark message as persistent
      channel.basicPublish("", QUEUE_NAME, 
                           MessageProperties.PERSISTENT_TEXT_PLAIN, 
                           message.getBytes("UTF-8"));
      System.out.println(" [x] Sent '" + message + "'");
    }
  }
}

Pysyvyyden "sudenkuoppa"

On tärkeää ymmärtää yksi yksityiskohta: viesti voi kadota, vaikka jonot olisivat kestäviä ja viestit pysyviä.

Näin voi tapahtua, jos viesti on matkalla tuottajalta välittäjälle tai jos se on saapunut välittäjälle mutta sitä ei ole vielä kirjoitettu levylle ja välittäjä kaatuu juuri sillä hetkellä.

Todellista luotettavuutta varten, kun haluatte varmistua siitä, että välittäjä on varmasti vastaanottanut ja tallentanut viestin, tarvitsette Publisher Confirms -vahvistukset. Käsittelemme niitä tulevassa oppitunnissa!

Milloin pysyvyyttä kannattaa käyttää

Persistointi ei ole ilmaista: se lisää kuormitusta, koska RabbitMQ:n on kirjoitettava tiedot levylle. Milloin sitä siis kannattaa käyttää?

  • Kriittiset tehtävät: Tilaukset, maksutapahtumat ja käyttäjien rekisteröitymiset.
  • Pitkäkestoiset prosessit: Kuvankäsittely ja videon koodaus.
  • Järjestelmien integrointi: Palveluiden välisen tiedonsiirron luotettavuuden varmistaminen.

Jos viestien häviäminen on hyväksyttävää (esimerkiksi nopeasti vanhentuvissa reaaliaikaisen valvonnan tiedoissa), voit jättää persistoinnin pois suorituskyvyn parantamiseksi.

Suorituskykyvaikutus

Tietojen kirjoittaminen levylle vie enemmän aikaa kuin niiden säilyttäminen muistissa. Siksi jonojen ja viestien persistoinnin käyttöönotto pienentää viestien läpimenoa (viestiä sekunnissa).

  • Pysyvät jonot: Vaikutus on vähäinen, koska vain jonon määritys tallennetaan.
  • Persistoidut viestit: Vaikutus on merkittävämpi, koska jokainen viesti kirjoitetaan levylle.

Kyse on kompromissista: parempi luotettavuus vastaan parempi suorituskyky. Valitkaa viestien persistointi aina, kun niiden häviämistä ei ehdottomasti voida hyväksyä.

Kertaus: persistointi käytännössä

Kerrataan lyhyesti täysin persistoidun kokoonpanon vaiheet:

  1. Määritä jono pysyväksi (durable=true).
  2. Lähetä viestit käyttämällä persistoitua toimitustilaa (MessageProperties.PERSISTENT_TEXT_PLAIN).
  3. Kun haluat parhaan mahdollisen luotettavuuden eli tiedon siitä, että välittäjä vastaanotti viestin, yhdistä tähän Publisher Confirms -toiminto (käsitellään myöhemmin).

Pikatarkistus: pysyvät jonot

Haluat varmistaa, että jono ja sen viestit säilyvät, jos RabbitMQ-välittäjä käynnistyy uudelleen. Mikä seuraavista on ehdottoman välttämätöntä, jotta itse jono säilyy uudelleenkäynnistyksen yli?

Kertaus ja seuraavat vaiheet

Hienoa työtä! Olette oppineet, miten RabbitMQ-jonot ja -viestit tehdään persistenteiksi. Tämä on tärkeä vaihe luotettavien viestintäjärjestelmien rakentamisessa.

Käsittelimme seuraavat aiheet:

  • Persistoinnin merkitys.
  • Miten määritetään pysyviä jonoja.
  • Miten lähetetään persistoituja viestejä.
  • Suorituskykyyn liittyvät kompromissit ja lennossa oleviin viesteihin liittyvä sudenkuoppa.

Seuraavassa oppitunnissa perehdymme Publisher Confirms -toimintoon. Se tarjoaa vielä paremman luotettavuuden varmistamalla, että välittäjä on todella vastaanottanut ja käsitellyt viestinne.

Aloita maksutta

Opi RabbitMQ-viestintä ja asynkroniset järjestelmät tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
11
Oppitunnit
44

Usein kysytyt kysymykset

Onko oppitunti ”Pysyvät viestit ja jonot” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa RabbitMQ-viestintä ja asynkroniset järjestelmät-oppimispolun 3 oppituntia, myös oppitunnin “Pysyvät viestit ja jonot”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. RabbitMQ-viestintä ja asynkroniset järjestelmät-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Pysyvät viestit ja jonot”?

Ymmärtäkää, miten viesteistä ja jonoista tehdään pysyviä, jotta ne säilyvät välittäjän uudelleenkäynnistyksen yli. Varmistakaa, etteivät tärkeät tietonne katoa edes epävakaissa ympäristöissä. Harjoittelet RabbitMQ-viestintä ja asynkroniset järjestelmät-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni RabbitMQ-viestintä ja asynkroniset järjestelmät-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin RabbitMQ-viestintä ja asynkroniset järjestelmät-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Pysyvät viestit ja jonot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä RabbitMQ-viestintä ja asynkroniset järjestelmät-oppitunnilla?

Kyllä. Jokainen RabbitMQ-viestintä ja asynkroniset järjestelmät-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pysyvät viestit ja jonot
  2. Julkaisijan vahvistukset luotettavuuden takaamiseksi
  3. Kuluttajien kuittaukset ja uudelleenjonotus
  4. Transaktiot ja julkaisijan vahvistukset
← Takaisin: RabbitMQ-viestintä ja asynkroniset järjestelmät