Chronicle Queue:少用或不用 lambda 的用法
Chronicle Queue: Usage with less or no lambdas
文档显示了 appender 或 tailer 通常与 lambda 的用法,如下所示:
appender.writeDocument(wireOut -> wireOut.write("log").marshallable(m ->
m.write("mkey").text(mkey)
.write("timestamp").dateTime(now)
.write("msg").text(data)));
对于我使用的裁缝:
int count = 0;
while (read from tailer ) {
wire.read("log").marshallable(m -> {
String mkey = m.read("mkey").text();
LocalDateTime ts = m.read("timestamp").dateTime();
String bmsg = m.read("msg").text();
//... do more stuff, like updating counters
count++;
}
}
在阅读期间,我想做一些事情,比如更新计数器,但这在 lambda 中是不可能的(需要 "effectively final" values/objects)。
- 在没有 lambda 的情况下使用 API 的好习惯是什么?
- 关于如何做到这一点还有其他想法吗? (目前我使用 AtomicInteger 对象)
static class Log extends AbstractMarshallable {
String mkey;
LocalDateTime timestamp;
String msg;
}
int count;
public void myMethod() {
Log log = new Log();
final SingleChronicleQueue q = SingleChronicleQueueBuilder.binary(new File("q4")).build();
final ExcerptAppender appender = q.acquireAppender();
final ExcerptTailer tailer = q.createTailer();
try (final DocumentContext dc = appender.writingDocument()) {
// this will store the contents of log to the queue
dc.wire().write("log").marshallable(log);
}
try (final DocumentContext dc = tailer.readingDocument()) {
if (!dc.isData())
return;
// this will replace the contents of log
dc.wire().read("log").marshallable(log);
//... do more stuff, like updating counters
count++;
}
}
文档显示了 appender 或 tailer 通常与 lambda 的用法,如下所示:
appender.writeDocument(wireOut -> wireOut.write("log").marshallable(m ->
m.write("mkey").text(mkey)
.write("timestamp").dateTime(now)
.write("msg").text(data)));
对于我使用的裁缝:
int count = 0;
while (read from tailer ) {
wire.read("log").marshallable(m -> {
String mkey = m.read("mkey").text();
LocalDateTime ts = m.read("timestamp").dateTime();
String bmsg = m.read("msg").text();
//... do more stuff, like updating counters
count++;
}
}
在阅读期间,我想做一些事情,比如更新计数器,但这在 lambda 中是不可能的(需要 "effectively final" values/objects)。
- 在没有 lambda 的情况下使用 API 的好习惯是什么?
- 关于如何做到这一点还有其他想法吗? (目前我使用 AtomicInteger 对象)
static class Log extends AbstractMarshallable {
String mkey;
LocalDateTime timestamp;
String msg;
}
int count;
public void myMethod() {
Log log = new Log();
final SingleChronicleQueue q = SingleChronicleQueueBuilder.binary(new File("q4")).build();
final ExcerptAppender appender = q.acquireAppender();
final ExcerptTailer tailer = q.createTailer();
try (final DocumentContext dc = appender.writingDocument()) {
// this will store the contents of log to the queue
dc.wire().write("log").marshallable(log);
}
try (final DocumentContext dc = tailer.readingDocument()) {
if (!dc.isData())
return;
// this will replace the contents of log
dc.wire().read("log").marshallable(log);
//... do more stuff, like updating counters
count++;
}
}