破坏者:设置eventandler顺序



我是破坏者的新手,我使用破坏者在类似管道的结构中传递线程。我可以运行一组处理程序如下与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));
 }

有更好的方法吗?

这样的东西可能更容易读:

    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);
        }
    }

相关内容

  • 没有找到相关文章

最新更新