2016-07-16 15 views
1

書き込みするメッセージの数が多い場合は、しばらくしてからIllegalStateExceptionになります。ここでは、コードは次のようになります。多くのメッセージでJavaの記録がIllegalStateExecptionを投げる

chronicle = ChronicleQueueBuilder.indexed(basePrefix).build(); 

ループが

{ 
     appender = chronicle.createAppender(); 
     appender.startExcerpt(); 
     appender.writeObject(message); 
     appender.finish(); 
    } 

ループエンドを開始

chronicle.close(); 

のJavaクロニクル3.6.2は、Java 1.7とバージョンです。

答えて

2

Indexed Chronicleでこのエラーが発生する最も一般的な理由は、それがシングルスレッドのライターであることでした。必要に応じてロックすることで、スレッドに書き込むスレッドを1つだけ確保する必要があります。

あなたは、ちょうど1アペンダを作成することができると(あなたが複数のスレッドを使用している場合)、このオブジェクトまたはキュー自体にロックする必要があり

クロニクルキューのV4 +は、この制限を持っており、任意の数をサポートしていませんサイクルごとに1つのファイルを持つスレッド。

+1

高負荷でillegalStateExceptionを観測したときに抜粋を書くための同期ブロックでのみテストしています。 – chappalprasad

+0

@chappalprasad質問にスタックトレースを含めることはできますか?フレームワーク内で –

+1

の同期が問題だった。ありがとう – chappalprasad

関連する問題