Disruptor:设置EventHandler顺序

时间:2016-11-10 08:36:31

标签: java event-handling disruptor-pattern

我是破坏者的新手,我正在使用disruptor在类似管道的结构中的线程之间传递。我可以使用hadleEventsWith或使用after()运行一组处理程序,如下所示。

disruptor.handleEventsWith(eventhandler1)
                .then(eventhandler2)
                .then(eventhandler3);

但是,我希望能够在不更改代码的情况下向此管道添加新的EventHandler。为此,我向每个事件处理程序添加一个整数值。然后,我将这些值和相关的处理程序带到创建一个有序的处理程序列表。然后,为破坏者提供我目前正在做的命令是

disruptor.handleEventsWith(handlerOrderList.get(0));
for (int i=1; i<handlerOrderList.size();i++) {
     disruptor.after(handlerOrderList.get(i1)).then(handlerOrderList.get(i));
 }

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:2)

这样的东西可能更具可读性:

    EventHandler<YourTypeHere>[] handlers = getOrderedHandlersAsArray();
    disruptor.handleEventsWith(handlers);

<强>更新 你是对的。在上面的例子中,处理程序将并行处理事件。要按顺序处理事件,您可以尝试以下内容:

    EventHandlerGroup<T> eventHandlerGroup = null;
    for (T handler : handlers) {
        if (eventHandlerGroup == null) {
            eventHandlerGroup = disruptor.handleEventsWith(handler);
        } else {
            eventHandlerGroup.then(handler);
        }
    }