我需要存储并从mongodb获取大量数据所以我要求使用lmax disruptor接收和存储数据我已经过了几天寻找lmax github帐户的简单教程,但我不太了解它如何把我的特殊数据放在lmax disruptor mechanism wheel里面
答案 0 :(得分:1)
有一个ringBuffer.publishEvents(..)方法,该方法接受对象的集合。如果要将整个批次发布到环形缓冲区,可以使用此方法。
如果要从环形缓冲区(在处理程序中)使用一批数据,并以批处理方式进行处理,则可以将EventHandler与onEvent()方法的参数'endOfBatch'一起使用。此参数是一个标志,向您显示在何时刷新缓冲区。我在项目中使用此机制来创建批处理。请看下面的例子:
@Component
public class MyHandler implements EventHandler<Event> {
private List<Event> batchOfEvents = new LinkedList<>();
@Override
public void onEvent(Event Event, long sequence, boolean endOfBatch) throws Exception {
// Add message to batch
batchOfEvents.add(event);
if (endOfBatch && !batchOfEvents.isEmpty()) {
// Feed your batch to some Mongo DB dao or any other service
someService.process(batchOfEvents);
batchOfEvents.clear();
}
}