java - 干扰者 : setting EventHandler order

标签 java event-handling disruptor-pattern

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

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

但是,我希望能够向此管道添加新的事件处理程序,而无需更改此处的代码。为此,我向每个事件处理程序添加一个整数值。然后,我将这些值和相关处理程序创建处理程序的有序列表。然后,向干扰者发出命令,我当前正在做的事情是

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

关于java - 干扰者 : setting EventHandler order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40523132/

相关文章:

java - pom.xml 和 web.xml 的 Web 项目之间的区别

r - R 控制台能否支持后台任务或中断(事件处理)?

apache-storm - Apache Storm 和 LMAX Disruptor 的区别

java - 如何使用 Android 自动化修复 "UnsupportedCommandException: actions"错误

java - AWS 使用 uploadUrl 时将元数据添加到文件内容

java - 如何使用 SQL WHERE IN 中的项目列表/数组动态填充查询

javascript - 如何使用事件处理程序创建 5 个 JQuery AJAX 调用?

JavaScript POO : it is possible to put a object method in an onclick?

disruptor-pattern - 在干扰器中使用 TimeoutBlockingWaitStrategy 时出现空指针异常

message-queue - 使用多个 LMAX Disruptor