Java 历史记录在大量消息时抛出 IllegalStateExecption

标签 java illegalstateexception chronicle chronicle-queue

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

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

循环开始

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

循环结束

    chronicle.close();

java Chronicle 3.6.2是java 1.7的版本。

最佳答案

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

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

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

关于Java 历史记录在大量消息时抛出 IllegalStateExecption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38415008/

相关文章:

java - Android Socket 继续读取直到特定的字符串序列

android - 非法状态异常 : The content of the adapter has changed but ListView did not receive a notification

java - Chronicle Queue StoreTailer.next() 创建大量垃圾

MediaPlayer 中的 java.lang.IllegalStateException

Java documentlistener - 输入后程序停止工作

java - Chronicle中Java9Memory来源

java - 如何向 System.out.print 添加宽度

java - 为什么servlet名称保留在RequestDispatcher.forward之后的url中?

java - 使组件小于 BoxLayout 中的可用区域