2017-11-13 4 views
0

私は、市場データの書き込みと読み取りにクロニクル4.5.27を使用しています。 私は1人のライターを持っていますが、複数のリーダーがいます。開発OSはWindowsであり、それに続いてLinux for Prodが導入されています。クロニクルキュー - 最後の読み取り位置から読み取り、すべてのコンシューマが読む場合はファイルを削除します

次のユースケースを実装するにはどうすればよいですか?

  1. キューを最後に読み取る方法を開始する方法はありますか?例えばもし読者が100レコードのファイルから15レコードを読んだら、次回の再起動から16レコード目の読み込みをクラッシュ/ストップさせた場合は? CQに耐久性のあるサポートが組み込まれていますか?
  2. ディスク容量を節約するためにすべてのコンシューマによって読み取られるファイルを削除します。

これは私が実装しましたが、開いている問題のためにファイルがWindows上で削除されていないようです。すべての関心のある消費者が進めた場合にのみファイルを削除できるCQの構築サポートはありますか?

このトピックに関するブログや記事はほとんど読んでいません。

https://vanilla-java.github.io/2016/03/29/Microservices-in-the-Chronicle-world-Part-4.html

https://groups.google.com/forum/#!topic/java-chronicle/0Nz5P-nvLgM

しかし、まだいずれかがこのユースケースを実装しているかどうかを知りたいです。

答えて

0

MessageHistoryを使用してコンシューマーのハイウォーターマークのトラッキングを実行しますが、これはコンシューマがクロニクルキューに出力を書き込む必要があります(基本的にコンシューマのリードシーケンスを出力キューに保存する必要があります)。

代わりに、各消費者が見てきた最大のシーケンス(インデックス)を記録するための独自のメカニズムを実装する必要があります。

ファイルの削除に関しては、キューファイルに対して開いているファイルハンドルを保持している他のプロセスが存在する可能性があります。読者-Aは、もはやキューファイル15.cq4を使用している場合は、削除されるから、それを停止し、あなたのコードは)file.deleteを(呼び出そうとしないでしょうが、読者-Bはまだそのファイルへの参照を有することができます。

より堅牢なポリシーは、すべての読者がそれらの処理を終えた後にファイルを削除する責任がある他のサービス/プロセスに各リーダーからのイベントのいくつかの並べ替えを持っているだろう。

+0

注:ウィンドウには、ファイルがマップされていない場合でも、プログラムが終了するまで削除されないことがあるという問題があります。 Linux/MacOSXのは、この問題を持っていません。 –

+0

Thanks MarkとPeter。私は最後の読み取りレコードの私自身の記録メカニズムを実装しているし、Windowsからファイルを削除するために、私は、アクティブなスレッドの出てくるし、その後、定期的にファイルを削除する必要があります。 – AmbGup

関連する問題