You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chronicle Queue使用writingDocument写入后无法读取的问题及用法查询

问题1 正确读写Chronicle Queue数据的方法

错误根因

你现有代码的核心问题是DocumentContext的使用逻辑错误:每次调用appender.writingDocument()获取的上下文对应一条独立的队列消息,你将1000次文本写入都放在同一个上下文生命周期中,相当于把1000个字符串无格式拼接写入同一条消息的二进制块,读取时直接调用readText()会因为内容格式不符合单条文本的编码规则抛出UTF解析异常。

正确写入代码

String basePath = OS.userDir() + "\\start";
ChronicleQueue queue = SingleChronicleQueueBuilder.single(basePath).build();
ExcerptAppender appender = queue.acquireAppender();
int i = 0;
// 循环写多条消息,每条消息对应一个DocumentContext
for (int j=0;j<1000;j++) {
    // 每次写消息都单独获取上下文,用try-with-resources自动关闭资源
    try (DocumentContext documentContext = appender.writingDocument()) {
        documentContext.wire().write().text("text :: "+i++);
    }
}

正确读取代码

两种读取方式都可正常使用:

方式1 直接读取文本(适配单条消息为纯文本的场景)

ExcerptTailer tailer = queue.createTailer("b");
String out;
while ((out = tailer.readText()) != null){
    System.out.println(out);
}

方式2 通过DocumentContext读取(通用场景,兼容性更强)

ExcerptTailer tailer = queue.createTailer("b");
DocumentContext dc = tailer.readingDocument();
while (dc.isPresent()) {
    String text = dc.wire().read().text();
    System.out.println(text);
    dc.close();
    dc = tailer.readingDocument();
}

问题2 Chronicle Queue官方参考文档获取渠道

  • 官方代码仓库:归属OpenHFT开源组织,搜索仓库名OpenHFT/Chronicle-Queue即可找到,仓库内的README、WIKI板块包含大量入门示例、API说明和最佳实践
  • 官方文档站点:OpenHFT官方文档站提供了完整的Chronicle Queue使用指南、进阶配置和常见问题排查方案,直接搜索Chronicle Queue官方文档即可访问

内容的提问来源于stack exchange,提问作者Asuka_Truth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:15:07