如何将REST接口返回的分块数据存入Chronicle Queue作为独立消息?
问题描述
我有一个REST接口,每次循环调用会以滚动方式返回分块数据,希望将每个数据块作为独立文档/消息存入Chronicle Queue。
接口返回的分块响应类结构如下:
public class ItemCollection { private Set<Item> items; }
其中Item类定义:
public class Item { private String id; private int version; }
看到一篇关于Chronicle Queue的帖子提到,无法用lambda将ItemCollection写入队列作为文档/消息。请问我是否应该采用帖子里提到的tailer.readingDocument().wire().read("itemCollection").marshallable(itemCollection)方式,同时让Item和ItemCollection都继承AbstractMarshallable?
解答
是的,你提到的方案完全可行,具体操作如下:
- 让
Item和ItemCollection都继承AbstractMarshallable,这样它们会自动具备Chronicle Queue所需的序列化/反序列化能力,无需额外编写序列化逻辑。 - 写入队列示例代码:
try (DocumentContext dc = appender.writingDocument()) { dc.wire().write("itemCollection").marshallable(itemCollection); }
- 读取队列可使用你提到的方式:
try (DocumentContext dc = tailer.readingDocument()) { if (dc.isPresent()) { ItemCollection ic = new ItemCollection(); dc.wire().read("itemCollection").marshallable(ic); // 处理读取到的ItemCollection数据 } }
额外补充:如果出于架构分层等原因不想让业务类继承AbstractMarshallable,也可以实现Marshaller接口自定义序列化逻辑,但继承AbstractMarshallable是最简洁直接的方案,非常适配你的场景。
内容的提问来源于stack exchange,提问作者Pavlo Denysenko
相关产品推荐
相关产品推荐

