クロニクルキューの概要
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メソッドを使用してアペンダーを起動します。 デフォルトのメッセージ容量128KでExcerptを開始します。 オーバーロードされたバージョンの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で見つけることができます。