当前位置: 首页 > 知识库问答 >
问题:

EventHandler OneEvent的LMAX中断器超时

娄丁雨
2023-03-14

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

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

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

问题是:

当disruptor engine调用onEvent()时,我们可以在缓冲区创建级别或其他级别设置超时,其中onEvent()方法调用将超时。

我在BlockingWaitStrategy中使用中断器3.3.2。

共有1个答案

胡俊美
2023-03-14

disruptor不支持事件处理程序超时。然而,我可以想出一些可能的方法来解决这个问题。

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

关于将长时间运行的任务提交给单独的破坏者进行处理,或者将未来写入事件中的另一个字段,并使用第二个eventHandler处理,还有其他选项。

 类似资料:
  • 是否已经有了Python3的实现(或至少绑定到Python3)? 我可以看到Github上有一个原始的Java实现,但我没有看到Python3的任何内容。

  • 我们有一个使用Disruptor框架的系统,它有五个注册阶段来实现EvenetHandler。 阶段按顺序工作,因此请求只能在第一阶段完成时移动到第二阶段,该移动由Disruptor内部维护。 我们对第三阶段有问题,这是瓶颈,需要大量时间,因为它进行不同的HTTP调用并将响应存储在请求对象中。 因此,我们希望在第三阶段花了一段时间之后,将请求(无论有什么响应)提前到第四和第五阶段。 如何超时任何特

  • 我是LMAX Disruptor的新手,我正在探索将其用于需要处理巨大流量的多层异步项目。 请求被传递到平台以发送SMS,请求被清理/检查简单错误并被记录。 获取并分析与发送SMS的客户端相关的各种其他信息,并将其他参数添加到SMS信息中。 分析并选择正确的路由。然后从SMS信息中设置特定于平台的协议参数并提交给路由器。 像这样,将有接收和处理短信传递到日志、账单、重试和许多其他的流程。在每个阶段

  • 我想使用Lmax Disruptor进行性能测试: 配置DURUPTOR 以某种方式“暂停”处理 向RingBuffer添加多条消息 “取消暂停”处理 这样,我可以清楚地测量缓冲区清空的速度。如果我“混合”添加了许多消息(这会带来一些延迟)并进行处理,那么在处理速度方面可能会有不太确定的结果。 然而,我似乎没有在LMAX Disruptor(https://lmax-exchange.github

  • 在使用disruptor时,可能会有一个(多个)消费者落后,并且由于这个缓慢的消费者,整个应用程序都会受到影响。 请记住,每个生产者(发布者)和消费者(EventProcessor)都在一个线程上运行,如何解决消费者速度慢的问题? 我们可以在单个消费者上使用多个线程吗?如果没有,有什么更好的选择?

  • 如何监控LMAX Disruptor?假设我有3个环缓冲区,并希望提供一个用户界面来提供环缓冲区的信息。