Hazelcast Ringbuffer readManyAsync返回空结果

Die*_*o D 5 java hazelcast

我正在尝试使用readManyAsync从RingBuffer中读取N个项目,但它总是返回一个空的resultSet.如果我使用readOne,我会得到数据.

我正在使用readManyAsync作为文档指定.还有另一种方法吗?

环境:

  • Java 8
  • Hazelcast 3.5.3

例:

Ringbuffer<String> buffer = this.hazelcastInstance.getRingbuffer("testBuffer");
buffer.add("a");
buffer.add("b");
buffer.add("c");
Long sequence = buffer.headSequence();
ICompletableFuture<ReadResultSet<String>> resultSetFuture = buffer.readManyAsync(sequence, 0, 3, null);
ReadResultSet<String> resultSet = resultSetFuture.get();

System.out.println("*** readManyAsync *** readCount: " + resultSet.readCount());
int count = 0;
for (String s : resultSet) {
    System.out.println(count + " - " + s);
    count++;
}

System.out.println("*** readOne ***");
for (int i = 0; i < 3; i++) {
    System.out.println(i + " - " + buffer.readOne(i));
}
Run Code Online (Sandbox Code Playgroud)

输出:

*** readManyAsync *** readCount: 0
*** readOne ***
0 - a
1 - b
2 - c
Run Code Online (Sandbox Code Playgroud)

pve*_*jer 5

收到零结果你很满意:

buffer.readManyAsync(sequence,0,3,null);

尝试将0更改为1.

buffer.readManyAsync(sequence,1,3,null);

现在呼叫将阻塞,直到至少有1个结果.

也许你可以通过要求超过3个项目来提高效率.在大多数情况下,检索数据很便宜,但是io /操作调度很昂贵.所以尽可能多地尝试批量.因此,尽量获得尽可能多的结果.例如100 ...或1000(这是最大值).