【问题标题】:LMAX Disruptor Timeout for the EventHandler onEventEventHandler onEvent 的 LMAX Disruptor Timeout
【发布时间】:2016-04-07 19:08:09
【问题描述】:

我有一个环形缓冲区和一个事件处理程序。这用作消息传递服务器的入站缓冲区。

在我的偶数处理程序中,它会执行一些 AMQP 服务调用,并且有时由于该调用等待而没有超时(调用 AMQP 服务的下划线协议库中的错误)。在 2000tps 的情况下,这会导致我的 4096 大小的环形缓冲区在瞬间达到 FULL。因为由于上述事实,onEvent 调用者线程似乎没有从该方法返回并在 onEvent() 内部无限等待。

目前,为该调用创建超时是不可能的。

问题是::

当中断引擎调用 onEvent() 时,我们可以在 Buffer 创建级别或其他级别设置超时,在这种情况下它会在 onEvent() 方法调用上设置超时。

我正在使用具有 BlockingWaitStrategy 的破坏者 3.3.2。

【问题讨论】:

    标签: disruptor-pattern lmax


    【解决方案1】:

    中断器不支持事件处理程序的超时。但是我可以想到一些可能的方法来解决这个问题。

    最简单的更改是将有问题的 AMQP 调用包装在一个 future 中,您可以在该调用上调用 Future#get(timeout, TimeUnit)

    还有其他选项可以将长期运行的任务提交给单独的中断器进行处理,或者将未来写入事件中的另一个字段并让第二个 eventHandler 处理。

    【讨论】:

      猜你喜欢
      • 2013-12-21
      • 1970-01-01
      • 2013-11-23
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多