EventHandler onEvent

时间:2016-04-07 19:08:09

标签: disruptor-pattern lmax

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

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

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

问题是::

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

我在BlockingWaitStrategy中使用disruptor 3.3.2。

1 个答案:

答案 0 :(得分:0)

破坏者不支持事件处理程序的超时。不过,我可以想一些可能的方法。

最简单的更改是将您有问题的AMQP呼叫包裹在future中,并呼叫Future#get(timeout, TimeUnit)

还有其他选择可以将长时间运行的任务提交给单独的破坏程序,以便将事件处理或写入事件中的另一个字段,并具有第二个eventHandler进程。