クロニクルキューの紹介
1概要
Chronicle Queueは、メモリマップファイルを使用してすべてのメッセージを保持します。これにより、プロセス間でメッセージを共有できます。
-
データを直接オフヒープメモリに格納するため、GCオーバーヘッドが発生しません** 高性能アプリケーション用の低遅延メッセージフレームワークを提供するように設計されています。
この簡単な記事では、基本的な一連の操作について説明します。
2 Mavenの依存関係
次の依存関係
を追加する必要があります。
<dependency>
<groupId>net.openhft</groupId>
<artifactId>chronicle</artifactId>
<version>3.6.4</version>
</dependency>
Maven Centralがホストしている最新バージョンは、以前に提供されたリンクでいつでも確認できます。
3ビルディングブロック
Chronicle Queueには3つの特徴的な概念があります。
-
抜粋 –
はデータコンテナです -
アペンダー –
アペンダーはデータの書き込みに使用されます -
トレーラー –
は、データを順次読み取るために使用されます
Chronicle
インタフェースを使用して、メモリの一部を
read-write
操作用に予約します。
これは、インスタンスを作成するためのコード例です。
File queueDir = Files.createTempDirectory("chronicle-queue").toFile();
Chronicle chronicle = ChronicleQueueBuilder.indexed(queueDir).build();
キューがメモリマップファイルのレコードを保持するベースディレクトリが必要です。
ChronicleQueueBuilder
クラスはさまざまな種類のキューを提供します。この場合は、インデックス内のレコードのメモリオフセットを維持するためにシーケンシャルインデックスを使用するために
IndexedChronicleQueue
を使用しました。
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
のオーバーロードバージョンを使用できます。
いったん開始されると、ライブラリによって提供される広範囲のwriteメソッドを使用して、リテラルまたはオブジェクトの値をキューに書き込むことができます。
最後に、書き込みが終了したら、抜粋を完了し、データをキューに保存し、後でディスクに保存します。
5キューから読む
キューからの値の読み取りは、ExcerptTrailerインスタンスを使用して簡単に実行できます。
これは、Javaでコレクションをトラバースするために使用するイテレータのようなものです。
キューから値を読みましょう。
ExcerptTailer tailer = chronicle.createTailer();
while (tailer.nextIndex()) {
tailer.readUTF();
tailer.readInt();
tailer.readLong();
tailer.readDouble();
}
tailer.finish();
トレーラーを作成した後、
nextIndex
メソッドを使用して、読み取る新しい抜粋があるかどうかを確認します。
ExcerptTailer
が新しい
Excerpt
を読むようになったら、リテラルとオブジェクト型の値のための
read
メソッドの範囲を使ってそこからメッセージを読むことができます。
最後に、
finish
APIで読み終わりました。
6. 結論
このチュートリアルでは、Chronicle Queueとそのビルディングブロックについて簡単に紹介しました。キューの作成、データの読み書きの方法を見ました。これを使用すると、低遅延、永続的なプロセス間通信(IPC)、ガベージコレクションのオーバーヘッドがないなど、多くの利点があります。
このソリューションは、データを損失することなく、メモリマップファイルを介してデータの永続性を提供します。また、複数のプロセスから同時に読み書きすることもできます。ただし、書き込みは同期的に処理されます。
いつものように、すべてのコードスニペットはhttps://github.com/eugenp/tutorials/tree/master/core-java-9[GitHubに追加]を見つけることができます。