如何在事件类中将列表推送到lmax disruptor

时间:2018-03-28 21:26:54

标签: java mongodb disruptor-pattern lmax

我需要存储并从mongodb获取大量数据所以我要求使用lmax disruptor接收和存储数据我已经过了几天寻找lmax github帐户的简单教程,但我不太了解它如何把我的特殊数据放在lmax disruptor mechanism wheel里面

1 个答案:

答案 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();
        }
}