Introduzione a Chronicle Queue

1. Panoramica

Chronicle Queue conserva ogni singolo messaggio utilizzando un file mappato in memoria. Questo ci consente di condividere messaggi tra i processi.

Memorizza i dati direttamente nella memoria fuori heap, quindi, liberandoli dal sovraccarico GC. È progettato per fornire framework di messaggi a bassa latenza per applicazioni ad alte prestazioni.

In questo rapido articolo, esamineremo il set di operazioni di base.

2. Dipendenze di Maven

Dobbiamo aggiungere la seguente dipendenza:

 net.openhft chronicle 3.6.4 

Possiamo sempre controllare le ultime versioni ospitate da Maven Central con il collegamento fornito in precedenza.

3. Blocchi di costruzione

Ci sono tre concetti caratteristici di Chronicle Queue:

  • Estratto: è un contenitore di dati
  • Appender: l' appender viene utilizzato per scrivere i dati
  • Trailer: viene utilizzato per la lettura sequenziale dei dati

Riserveremo la porzione di memoria per le operazioni di lettura e scrittura utilizzando l' interfaccia di Chronicle .

Ecco il codice di esempio per la creazione di un'istanza:

File queueDir = Files.createTempDirectory("chronicle-queue").toFile(); Chronicle chronicle = ChronicleQueueBuilder.indexed(queueDir).build();

Avremo bisogno di una directory di base in cui la coda manterrà i record nei file mappati in memoria.

La classe ChronicleQueueBuilder fornisce diversi tipi di code. In questo caso, abbiamo utilizzato IndexedChronicleQueue whic h utilizza l'indice sequenziale a mantenere gli offset di memoria di record in una coda.

4. Scrittura in coda

Per scrivere gli elementi in una coda, dobbiamo creare un oggetto della classe ExcerptAppender utilizzando l' istanza di Chronicle . Ecco un esempio di codice per scrivere i messaggi nella coda:

Ecco un esempio di codice per scrivere i messaggi nella coda:

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

Dopo aver creato l'appender, avvieremo l'appender utilizzando un metodo startExcerpt . Avvia un estratto con la capacità di messaggio predefinita di 128K . Possiamo usare una versione sovraccarica di startExcerpt per fornire una capacità personalizzata.

Una volta avviato, possiamo scrivere qualsiasi valore letterale o oggetto nella coda utilizzando un'ampia gamma di metodi di scrittura forniti dalla libreria.

Infine, quando avremo finito di scrivere, finiremo l'estratto, salveremo i dati in una coda e successivamente su disco.

5. Lettura dalla coda

La lettura dei valori dalla coda può essere eseguita facilmente utilizzando l' istanza ExcerptTrailer .

È proprio come un iteratore che usiamo per attraversare una raccolta in Java.

Leggiamo i valori dalla coda:

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

Dopo aver creato il trailer, utilizziamo il metodo nextIndex per verificare se c'è un nuovo estratto da leggere.

Una volta che ExcerptTailer ha un nuovo estratto da leggere, possiamo leggere i messaggi da esso utilizzando una gamma di metodi di lettura per valori letterali e di tipo oggetto.

Infine, terminiamo la lettura con l' API finish .

6. Conclusione

In questo tutorial, abbiamo fornito una breve introduzione a Chronicle Queue e ai suoi elementi costitutivi. Abbiamo visto come creare una coda, scrivere e leggere dati. Il suo utilizzo offre molti vantaggi, tra cui bassa latenza, comunicazione interprocesso durevole (IPC) e nessun sovraccarico di Garbage Collection.

La soluzione fornisce la persistenza dei dati attraverso file mappati in memoria, senza perdita di dati. Consente inoltre letture e scritture simultanee da più processi; tuttavia, le scritture vengono gestite in modo sincrono.

Come sempre, tutti gli snippet di codice possono essere trovati su GitHub.