LMAX Disruptor Timeout EventHandler

Posted

技术标签:

【中文标题】LMAX Disruptor Timeout EventHandler【英文标题】: 【发布时间】:2013-12-21 23:52:17 【问题描述】:

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

每个阶段都是按顺序工作的,所以一个请求只有在第一个阶段完成后才能移动到第二个阶段,这个移动由 Disruptor 内部维护。

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

因此,在第三阶段花费了一段时间后,我们希望将请求(无论它有什么响应)推进到第四和第五阶段。

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

或者,

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

【问题讨论】:

【参考方案1】:

我们尝试过的解决方案是

    有一个挂起检测线程,它监视一个阶段(或所有阶段)处理的序列。在事件处理器本身中有一个计时信息。 超时中断事件处理器线程。这应该使事件处理器退出它正在执行的旋转。所以在这里我们失去了处理阶段的线程(或线程之一) 替换事件处理器线程。

解决方案需要编写我们自己的事件处理器,它可以感知中断,并提供将事件阶段动态添加到中断器的规定

【讨论】:

谢谢,我会尝试解决方案。

以上是关于LMAX Disruptor Timeout EventHandler的主要内容,如果未能解决你的问题,请参考以下文章

LMAX Disruptor 最简单实际的示例代码

监控 LMAX Disruptor

LMAX Disruptor 依赖图/带有 SequenceBarrier 的门控

是否应该将 Disruptor (LMAX) 与内存和 CQRS 中的大模型一起使用?

Log4j2 - java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor

LMAX Disruptor - 啥决定了批量大小?