LMAX的破坏者。如何定义多个EventHandlerGroup?

时间:2018-11-19 06:53:43

标签: java disruptor-pattern lmax

我想用multi-EventHandleGroup处理不同的事件吗?我找不到那个例子。谢谢... 这是代码:

  executorService = Executors.newFixedThreadPool(threadPoolSize);
  disruptor = new Disruptor<>(new DefaultEventFactory(), 
  ringBufferSize, executorService
     , ProducerType.SINGLE, new BlockingWaitStrategy());
  EventHandlerGroup<OrderEvent> orderEventEventHandlerGroup = 
  disruptor.handleEventsWith(
     new OrderEventHandle(rabbitTemplate));
  orderEventEventHandlerGroup.then(new 
  MoveEventFromProcessing(redisService))
     .then(new EventClearHandle());

我想添加另一个事件,并希望通过另一个EventHandleGroup来处理它,例如:

cancelEventDisruptor.handleEventsWith(new 
CancelOrderHandle()).then(new MoveEventFromProcessing(redisService))
     .then(new EventClearHandle());

1 个答案:

答案 0 :(得分:0)

所有eventHandlers查看所有消息。为了实现您正在寻找的OrderEventHandleCancelOrderHandle,需要能够确定所见事件的类型,并忽略那些不适用于它们的事件。

在示例代码中,您还将建立两个完整的处理链。最好建议在MoveEventFromProcessingOrderEventHandle上都设置一个CancelOrderHandle门(请参见SequenceBarrier),然后在其上选通EventClearHandle。这样的拓扑看起来就像

Producer -> RB -> OrderEventHandle -> MoveEventFromProcessing -> EventClearHandle \-> CancelEventHandle /