Introduksjon til Chronicle Queue

1. Oversikt

Chronicle Queue fortsetter hver eneste melding ved hjelp av en minnekartet fil. Dette lar oss dele meldinger mellom prosesser.

Den lagrer data direkte i hukommelsen utenfor heapen, og gjør den derfor fri for GC-overhead. Den er designet for å gi meldingsrammer med lav latens for applikasjoner med høy ytelse.

I denne raske artikkelen vil vi se på det grunnleggende settet med operasjoner.

2. Maven-avhengigheter

Vi må legge til følgende avhengighet:

 nett.openhft krønike 3.6.4 

Vi kan alltid sjekke de nyeste versjonene som er hostet av Maven Central med lenken som ble gitt før.

3. Byggesteiner

Det er tre konsepter som er karakteristiske for Chronicle Queue:

  • Utdrag - er en databeholder
  • Appender - appender brukes til å skrive data
  • Trailer - brukes for sekvensiell lesing av data

Vi reserverer delen av minnet for Les Skriv operasjoner ved hjelp av Kronikk grensesnitt.

Her er eksempelkoden for å opprette en forekomst:

File queueDir = Files.createTempDirectory ("kronikk-kø"). ToFile (); Chronicle chronicle = ChronicleQueueBuilder.indexed (queueDir) .build ();

Vi trenger en basekatalog der køen vil fortsette poster i minnekartede filer.

ChronicleQueueBuilder klasse gir forskjellige typer køer. I dette tilfellet brukte vi IndexedChronicleQueue which bruker sekvensiell indeks for å opprettholde minneforskyvninger av poster i en kø.

4. Skrive til køen

For å skrive elementene til en kø, må vi lage et objekt av UtdragAppender klasse bruker Kronikk forekomst. Her er eksempelkode for å skrive meldingene til køen:

Her er eksempelkode for å skrive meldingene til køen:

ExcerptAppender appender = chronicle.createAppender (); appender.startExcerpt (); String stringVal = "Hello World"; int intVal = 101; lang longVal = System.currentTimeMillis (); dobbel dobbelVal = 90.00192091d; appender.writeUTF (stringValue); appender.writeInt (intValue); appender.writeLong (longValue); appender.writeDouble (doubleValue); appender.finish ();

Etter å ha opprettet appenderen, starter vi appenderen ved hjelp av a startutdrag metode. Det starter en Utdrag med standard meldingskapasitet på 128K. Vi kan bruke en overbelastet versjon av startutdrag for å gi en tilpasset kapasitet.

Når vi har startet, kan vi skrive hvilken som helst bokstavs- eller objektverdi til køen ved hjelp av et bredt spekter av skrivemetoder som tilbys av biblioteket.

Til slutt, når vi er ferdige med å skrive, avslutter vi utdraget, lagrer dataene i en kø og senere på platen.

5. Lesing fra køen

Leser verdiene fra køen kan enkelt gjøres ved hjelp av UtdragTrailer forekomst.

Det er akkurat som en iterator vi bruker for å krysse en samling i Java.

La oss lese verdier fra køen:

ExcerptTailer tailer = chronicle.createTailer (); mens (tailer.nextIndex ()) {tailer.readUTF (); tailer.readInt (); tailer.readLong (); tailer.readDouble (); } tailer.finish ();

Etter å ha laget traileren bruker vi nesteIndex metode for å sjekke om det er et nytt utdrag å lese.

En gang ExcerptTailer har en ny Utdrag for å lese, kan vi lese meldinger fra den ved hjelp av en rekke lese metoder for bokstavlige og objekttypeverdier.

Til slutt avslutter vi lesingen med bli ferdig API.

6. Konklusjon

I denne opplæringen ga vi en kort introduksjon til Chronicle Queue og dens byggesteiner. Vi så hvordan du oppretter en kø, skriver og leser data. Å bruke den gir mange fordeler, inkludert lav latens, holdbar interprosesskommunikasjon (IPC), så vel som ingen søppelsamling.

Løsningen gir vedvarende data gjennom minnekartede filer - uten tap av data. Det tillater også samtidig leseskriving fra flere prosesser; imidlertid håndteres skriverier synkront.

Som alltid kan alle kodebiter finnes på GitHub.


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