Einführung in die Chronik-Warteschlange

Einführung in die Chronicle Queue

1. Überblick

Die Chronik-Warteschlange speichert jede einzelne Nachricht mithilfe einer Speicherzuordnungsdatei. Dies ermöglicht es uns, Nachrichten zwischen Prozessen auszutauschen.

It stores data directly to off-heap memory, therefore, making it free of GC overhead. Es wurde entwickelt, um ein Nachrichtenframework mit geringer Latenz für Hochleistungsanwendungen bereitzustellen.

In diesem kurzen Artikel werden wir uns mit den grundlegenden Operationen befassen.

2. Maven-Abhängigkeiten

Wir müssen diefollowing dependency hinzufügen:


    net.openhft
    chronicle
    3.6.4

Wir können die neuesten Versionen, die von Maven Central gehostet werden, jederzeit über den zuvor bereitgestellten Link überprüfen.

3. Bausteine

Es gibt drei charakteristische Konzepte für Chronicle Queue:

  • Excerpt – ist ein Datencontainer

  • Der Appender vonAppender –wird zum Schreiben von Daten verwendet

  • Trailer – wird zum sequentiellen Lesen von Daten verwendet

Wir reservieren den Teil des Speichers fürread-write-Operationen über dieChronicle-Schnittstelle.

Hier ist der Beispielcode zum Erstellen einer Instanz:

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

Wir benötigen ein Basisverzeichnis, in dem die Warteschlange Datensätze in Dateien mit Speicherzuordnung beibehält.

Die KlasseChronicleQueueBuilderbietet verschiedene Arten von Warteschlangen. In diesem Fall haben wirIndexedChronicleQueue verwendet, währendh den sequentiellen Index verwendet, um Speicherversätze von Datensätzen in einer Warteschlange aufrechtzuerhalten.

4. Schreiben in die Warteschlange

Um die Elemente in eine Warteschlange zu schreiben, müssen Sie mit der Instanz vonChronicleein Objekt der KlasseExcerptAppendererstellen. Hier ist ein Beispielcode zum Schreiben der Nachrichten in die Warteschlange:

Hier ist ein Beispielcode zum Schreiben der Nachrichten in die Warteschlange:

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();

Nach dem Erstellen des Appenders starten wir den Appender mit einerstartExcerpt-Methode. Es startet einExcerpt mit der Standardnachrichtenkapazität von128K. Wir können eine überladene Version vonstartExcerpt verwenden, um eine benutzerdefinierte Kapazität bereitzustellen.

Einmal gestartet, können wir jeden Literal- oder Objektwert in die Warteschlange schreiben, indem wir eine breite Palette von Schreibmethoden verwenden, die von der Bibliothek bereitgestellt werden.

Wenn wir mit dem Schreiben fertig sind, beenden wir den Auszug, speichern die Daten in einer Warteschlange und später auf einer Disc.

5. Lesen aus der Warteschlange

Das Lesen der Wertefrom in der Warteschlange kann einfach mit der InstanzExcerptTrailererfolgen.

Es ist wie ein Iterator, mit dem wir eine Sammlung in Java durchlaufen.

Lesen wir die Werte aus der Warteschlange:

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

Nach dem Erstellen des Trailers überprüfen wir mit der MethodenextIndex, ob ein neuer Auszug zum Lesen vorhanden ist.

SobaldExcerptTailer ein neuesExcerpt zum Lesen hat, können wir Nachrichten daraus mit einer Reihe vonread-Methoden für Literal- und Objekttypwerte lesen.

Schließlich beenden wir das Lesen mit derfinish API.

6. Fazit

In diesem Tutorial gaben wir eine kurze Einführung in die Chronicle Queue und ihre Bausteine. Wir haben gesehen, wie man eine Warteschlange erstellt, Daten schreibt und liest. Die Verwendung bietet viele Vorteile, einschließlich einer geringen Latenz, einer dauerhaften Interprozesskommunikation (IPC) sowie keinen zusätzlichen Aufwand für die Garbage Collection.

Die Lösung bietet Datenpersistenz durch Speicherzuordnungsdateien - ohne Datenverlust. Es ermöglicht auch gleichzeitiges Lesen und Schreiben von mehreren Prozessen. Schreibvorgänge werden jedoch synchron verarbeitet.

Wie immer können alle Codefragmenteover on GitHub gefunden werden.