Вот еще один с моей стороны. Я попробовал один пример разрушителя, используя библиотеки Lmax с открытым исходным кодом.
Я думаю, что идея использования lmax disruptor (а не внутренностей disruptor) состоит в том, чтобы создать диспетчер сообщений и зарегистрировать прослушиватель событий как потребитель
Вы создаете прерыватель, с указанием типа сообщения.
Disruptor<Message> disruptor = new Disruptor<Message>(Message.EVENT_FACTORY, 2048, exec);`
Вы создаете обработчик
final EventHandler<Message> handler = new EventHandler<Message>() {
// event will eventually be recycled by the Disruptor after it wraps
public void onEvent(final Message event, final long sequence, final boolean endOfBatch) throws Exception {
Integer value = event.getMsg();
if(value % 10000 == 0){
System.out.println("ValueEvent: " + value + " Sequence: " + sequence);
double timeINnanos = (System.nanoTime()-startTime);
double timetaken = (timeINnanos/1e9);
System.out.println("Time Taken till now in sec " + timetaken );
}
}
};
Регистрация обработчика с прерывателем
disruptor.handleEventsWith(handler);
Запустите этот прерыватель и передайте возвращенный RingBuffer вашему производителю
RingBuffer<Message> ringBuffer = disruptor.start();
Producer producer = new Producer(ringBuffer);
Полный код можно найти здесь
Github ссылка