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

LMAX中断器超时事件处理程序

童琪
2023-03-14

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

阶段按顺序工作,因此请求只能在第一阶段完成时移动到第二阶段,该移动由Disruptor内部维护。

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

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

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

是否有方法注册在定义的超时之后触发的事件,这可能类似于系统级超时?

共有1个答案

松琦
2023-03-14

我们尝试的解决方案是

  1. 有一个挂起检测线程,用于监视一个阶段(或所有阶段)处理的序列。在事件处理器本身中具有计时信息
  2. 超时时中断事件处理器线程。这将使事件处理器退出正在进行的旋转。因此,这里我们丢失了处理阶段的线程(或其中一个线程)
  3. 更换事件处理器线程

解决方案需要编写我们自己的事件处理器,该处理器具有中断感知功能,并提供一个将事件阶段动态添加到中断器的配置

 类似资料:
  • 我有一个环形缓冲区和一个事件处理程序。这用作消息传递服务器的入站缓冲区。 在偶处理程序中,它执行一些AMQP服务调用,有时由于调用没有超时而等待(下划线协议库中调用AMQP服务的错误)。对于2000tps,这使我的4096大小的环形缓冲区在一瞬间就满了。因为由于上述事实,onEvent调用线程似乎没有从该方法返回,并且在onEvent()内无限等待。 目前,不可能为该调用创建超时。 问题是: 当d

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

  • 我在用轴突事件跟踪处理器。有时事件需要10秒才能处理。 这似乎导致消息再次被处理,并出现在日志“释放令牌X/0的声明失败。它由另一个节点拥有”中。 如果我增加段数,它不会记录此事件,但事件仍被处理两次,所以我认为这可能会引起误解。 (我想我搞错了) 我已经尝试调整fetchDelay、cleanupDelay和TokenClaimInterval。没有一个解决了这个问题。我是不是缺了什么东西? 编

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

  • 问题内容: 我正在开发使用C ++并使用Linux GNU C编译器进行编译的应用程序。 我想在用户使用+ 键中断脚本时调用函数。 我该怎么办?任何答案将不胜感激。 问题答案: 按时,操作系统将向该进程发送信号。有许多信号,其中之一是SIGINT。SIGINT(“程序中断”)是终止信号之一。 终止信号还有几种,但是关于SIGINT的有趣的事情是它可以由程序处理(捕获)。SIGINT的默认操作是程序

  • 我仍然是Java和JavaFX的初学者,目前我正在努力寻找一种方法来阻止/中断单击按钮时发生的事件。因此,我正在构建一个程序,将产品(类)添加到TableView中。到目前为止,一切正常,产品添加成功,其参数由我的自定义函数检查,用户是否在名称/价格/金额字段中分别输入了字符串/双精度/整数值。 在我的检查功能中,当输入的值不正确时,也会打印一个错误,但我也希望这样做,以便在输入不正确的值时,3个