2

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

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

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

问题是::

当中断引擎调用 onEvent() 时,我们是否可以在 Buffer 创建级别或其他级别设置超时,其中 onEvent() 方法调用会有超时。

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

4

1 回答 1

0

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

最简单的更改是将有问题的 AMQP 调用包装在您调用的将来Future#get(timeout, TimeUnit)

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

于 2016-04-13T05:25:00.133 回答