Introduktion til Chronicle Queue

1. Oversigt

Chronicle Queue fortsætter hver eneste besked ved hjælp af en hukommelseskortet fil. Dette giver os mulighed for at dele meddelelser mellem processer.

Den gemmer data direkte i hukommelsen uden for heap, hvilket gør den fri for GC-omkostninger. Det er designet til at levere meddelelsesrammer med lav latens til applikationer med høj ydeevne.

I denne hurtige artikel vil vi se på det grundlæggende sæt af operationer.

2. Maven-afhængigheder

Vi skal tilføje følgende afhængighed:

 net.openhft krønike 3.6.4 

Vi kan altid kontrollere de nyeste versioner, der er hostet af Maven Central med det link, der er angivet før.

3. Byggesten

Der er tre begreber, der er karakteristiske for Chronicle Queue:

  • Uddrag - er en datacontainer
  • Appender - appender bruges til at skrive data
  • Trailer - bruges til sekventiel læsning af data

Vi reserverer den del af hukommelsen til læse skrive operationer ved hjælp af Krønike interface.

Her er eksempelkoden til oprettelse af en forekomst:

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

Vi har brug for en basekatalog, hvor køen fortsætter poster i hukommelseskortede filer.

ChronicleQueueBuilder klasse giver forskellige typer køer. I dette tilfælde brugte vi IndexedChronicleQueue which bruger det sekventielle indeks til at opretholde hukommelsesforskydninger af poster i en kø.

4. Skrivning til køen

For at skrive elementerne i en kø skal vi oprette et objekt af UddragAppender klasse ved hjælp af Krønike eksempel. Her er eksempelkode til at skrive beskederne til køen:

Her er eksempelkode til at skrive beskederne til køen:

ExcerptAppender appender = chronicle.createAppender (); appender.startExcerpt (); String stringVal = "Hej verden"; int intVal = 101; lang longVal = System.currentTimeMillis (); dobbelt dobbeltVal = 90.00192091d; appender.writeUTF (stringValue); appender.writeInt (intValue); appender.writeLong (longValue); appender.writeDouble (doubleValue); appender.finish ();

Efter oprettelse af appenderen starter vi appenderen ved hjælp af en startUddrag metode. Det starter en Uddrag med standardbeskedkapaciteten på 128K. Vi kan bruge en overbelastet version af startUddrag at give en tilpasset kapacitet.

Når vi er startet, kan vi skrive en hvilken som helst bogstav- eller objektværdi til køen ved hjælp af en lang række skrivemetoder, der leveres af biblioteket.

Endelig, når vi er færdige med at skrive, afslutter vi uddraget, gemmer dataene i en kø og senere på disken.

5. Læsning fra køen

Læsning af værdierne fra køen kan let gøres ved hjælp af ExcerptTrailer eksempel.

Det er ligesom en iterator, vi bruger til at krydse en samling i Java.

Lad os læse værdier fra køen:

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

Efter oprettelsen af ​​traileren bruger vi næsteIndex metode til at kontrollere, om der er et nyt uddrag at læse.

Enkelt gang ExcerptTailer har en ny Uddrag at læse, kan vi læse beskeder fra det ved hjælp af en række Læs metoder til bogstavelige og objekttypeværdier.

Endelig afslutter vi læsningen med Afslut API.

6. Konklusion

I denne vejledning gav vi en kort introduktion til Chronicle Queue og dens byggesten. Vi så, hvordan man opretter en kø, skriver og læser data. Brug af det giver mange fordele, herunder lav latenstid, holdbar interprocess-kommunikation (IPC) såvel som intet overskud til affaldssamling.

Løsningen giver datapersistens gennem hukommelseskortede filer - uden datatab. Det tillader også samtidige læseskrivninger fra flere processer; dog håndteres skriverier synkront.

Som altid kan alle kodestykker findes på GitHub.


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