LMAX Disruptor Timeout EventHandler

时间:2013-12-05 06:43:17

标签: multithreading disruptor-pattern lmax

我们有一个使用Disruptor框架的系统,它有五个注册阶段实现EvenetHandler。

这些阶段在序列中起作用,因此请求只能在第一阶段完成时移动到第二阶段,此动作由Disruptor在内部维护。

我们遇到第三阶段的问题,它是需要花费大量时间的瓶颈,因为它会在请求对象中进行不同的HTTP调用并存储响应。

因此,我们希望在第三阶段花费一些时间之后,将请求(以及它所具有的任何响应)移至第四和第五阶段。

如何暂停任何特定阶段(在本案例中为第三阶段)并强制将请求移至下一阶段?

或者,

有没有办法注册一些在一些定义的超时后被触发的事件,这可能是系统级超时?

1 个答案:

答案 0 :(得分:1)

我们尝试的解决方案是

  1. 有一个挂起检测线程,用于监视由一个阶段(或所有阶段)处理的序列。在事件处理器本身中有一个时间信息。
  2. on time out中断事件处理器线程。哪个应该使事件处理器退出它正在进行的旋转。所以这里我们丢失了处理阶段的线程(或其中一个线程)
  3. 替换事件处理器线程。
  4. 解决方案需要编写我们自己的事件处理器,该事件处理器具有中断感知功能,并且可以动态地将事件阶段添加到干扰源