Java 编年史在大量消息时抛出 IllegalStateExecption

Java chronicle throwing IllegalStateExecption at high number of messages

当要写入的消息数量很多时,一段时间后得到 IllegalStateException。这是代码:

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

循环开始

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

循环结束

    chronicle.close();

javachronicle 3.6.2 是java1.7.

的版本

Indexed Chronicle 中出现此错误的最常见原因是它是单线程编写器。您需要确保只有一个线程对此进行写入,如果需要,可能需要锁定。

你应该能够只创建一个 Appender,永远锁定这个对象或队列本身(如果你使用多线程)

Chronicle Queue v4+ 没有此限制,支持任意数量的线程,每个周期一个文件。