Disruptor:设置 EventHandler 顺序
Disruptor: setting EventHandler order
我是 disruptor 的新手,我正在使用 disruptor 在管道中的线程之间传递,例如 structure.I 可以 运行 一组处理程序,如下所示,使用 hadleEventsWith 或使用 after()。
disruptor.handleEventsWith(eventhandler1)
.then(eventhandler2)
.then(eventhandler3);
但是,我希望能够在不更改代码的情况下向此管道添加新的事件处理程序 here.To 为此,我正在为每个事件添加一个整数值 handler.Then,我正在接受这些值和相关的处理程序来创建处理程序的有序列表。然后,向破坏者发出命令我目前正在做的是
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);
}
}
我是 disruptor 的新手,我正在使用 disruptor 在管道中的线程之间传递,例如 structure.I 可以 运行 一组处理程序,如下所示,使用 hadleEventsWith 或使用 after()。
disruptor.handleEventsWith(eventhandler1)
.then(eventhandler2)
.then(eventhandler3);
但是,我希望能够在不更改代码的情况下向此管道添加新的事件处理程序 here.To 为此,我正在为每个事件添加一个整数值 handler.Then,我正在接受这些值和相关的处理程序来创建处理程序的有序列表。然后,向破坏者发出命令我目前正在做的是
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);
}
}