クロニクルキューの紹介

クロニクルキューの概要

1. 概要

クロニクルキューは、メモリマップファイルを使用してすべてのメッセージを永続化します。 これにより、プロセス間でメッセージを共有できます。

It stores data directly to off-heap memory, therefore, making it free of GC overhead.これは、高性能アプリケーションに低遅延のメッセージフレームワークを提供するために設計されています。

この簡単な記事では、基本的な一連の操作について説明します。

2. Mavenの依存関係

following dependencyを追加する必要があります。


    net.openhft
    chronicle
    3.6.4

以前に提供されたリンクを使用して、Maven Centralでホストされている最新バージョンをいつでも確認できます。

3. ビルディングブロック

クロニクルキューに特徴的な3つの概念があります。

  • Excerpt –はデータコンテナです

  • Appender –アペンダーはデータの書き込みに使用されます

  • Trailer –は、データを順次読み取るために使用されます

Chronicleインターフェースを使用して、read-write操作用にメモリの一部を予約します。

インスタンスを作成するためのサンプルコードは次のとおりです。

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

キューがメモリマップトファイルにレコードを保持するベースディレクトリが必要になります。

ChronicleQueueBuilderクラスは、さまざまなタイプのキューを提供します。 この場合、IndexedChronicleQueueを使用しましたが、hはシーケンシャルインデックスを使用して、キュー内のレコードのメモリオフセットを維持します。

4. キューへの書き込み

アイテムをキューに書き込むには、Chronicleインスタンスを使用してExcerptAppenderクラスのオブジェクトを作成する必要があります。 メッセージをキューに書き込むためのサンプルコードを次に示します。

メッセージをキューに書き込むためのサンプルコードを次に示します。

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

アペンダーを作成した後、startExcerptメソッドを使用してアペンダーを起動します。 デフォルトのメッセージ容量128KExcerptを開始します。 オーバーロードされたバージョンのstartExcerptを使用して、カスタム容量を提供できます。

開始すると、ライブラリが提供するさまざまな書き込みメソッドを使用して、リテラル値またはオブジェクト値をキューに書き込むことができます。

最後に、書き込みが終了したら、抜粋を終了し、データをキューに保存し、後でディスクに保存します。

5. キューからの読み取り

キューの値fromの読み取りは、ExcerptTrailerインスタンスを使用して簡単に実行できます。

これは、Javaでコレクションをトラバースするために使用するイテレーターのようなものです。

キューから値を読み取ってみましょう。

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

予告編を作成した後、nextIndexメソッドを使用して、読み取る新しい抜粋があるかどうかを確認します。

ExcerptTailerに読み取る新しいExcerptがあると、リテラルおよびオブジェクトタイプ値のreadメソッドの範囲を使用してそこからメッセージを読み取ることができます。

最後に、finishAPIを使用して読み取りを終了します。

6. 結論

このチュートリアルでは、クロニクルキューとその構成要素について簡単に紹介しました。 キューを作成し、データを読み書きする方法を見ました。 これを使用すると、ガベージコレクションのオーバーヘッドがないだけでなく、低遅延、永続的なプロセス間通信(IPC)など、多くの利点が得られます。

このソリューションは、メモリにマップされたファイルを通じてデータの永続性を提供します-データの損失はありません。 また、複数のプロセスからの同時読み取り/書き込みも可能です。ただし、書き込みは同期的に処理されます。

いつものように、すべてのコードスニペットはover on GitHubで見つけることができます。