我试图在处理程序之间创建一种循环依赖关系,但我不太清楚如何正确处理。我想要实现的是制作人的变体-
所以,破坏者。handleEventsWith(h1、h2、h3)。然后(h4) 。但我还有其他要求
使用单个事件处理程序的等效执行逻辑可以是:
disruptor.handleEventsWith((event, sequence, endOfBatch) -> {
Arrays.asList(h1, h2, h3).parallelStream()
.forEach(h -> h.onEvent(event, sequence, endOfBatch));
h4.onEvent(event, sequence, endOfBatch);
});
设计上下文是处理程序1-3各自根据消息更新自己的状态,并且在消息被三个处理程序中的每一个处理后,它们处于一致状态。然后,处理程序4根据处理程序1-3更新的状态运行一些逻辑。因此,处理程序4应该只看到1-3维护的数据结构的一致状态,这意味着处理程序1-3在处理程序4完成之前不应该处理下一条消息。
(尽管目标肯定是使用Disruptor来管理并发性,而不是java.util.Stream)
不确定这是否重要,但处理程序4的逻辑也可以分为两部分,一部分要求处理程序1-3都没有更新,另一部分只要求处理程序4的第一部分已经完成。因此处理程序1-3可以在处理程序4的第二部分仍在执行时处理消息。
有没有办法做到这一点?或者我的设计有缺陷?我觉得应该有一种方法可以通过SequenceBarrier
来做到这一点,但我不太明白如何实现这个自定义屏障。对于处理程序1-3,我想我想用逻辑处理程序[1:3]. lastProcessedSequence()==handler[4]. lastProcessedSequence()
制作一个屏障,但我不确定将该逻辑放在哪里。
谢谢
我会考虑让处理程序是无状态的,并使用它们处理的消息来包含系统的状态。这样,您根本不需要同步处理程序。
如何监控LMAX Disruptor?假设我有3个环缓冲区,并希望提供一个用户界面来提供环缓冲区的信息。
我试图在java应用程序中使用log4j2与干扰器。我的类路径中有以下jar文件: log4j-api-2.0-rc2。罐子 在我的Java类中,我将执行以下测试: 我的log4j2。xml文件如下所示: 当我运行应用程序时,出现以下错误(没有日志输出):
依赖关系会迅速变得复杂起来,并且很容易形成 循环依赖(circular dependency) (即 A 依赖 B,B 又依赖 A),这将导致 Puppet 发生错误并停止工作。 幸运的是, Puppet 的 --graph 选项可以很容易生成一个资源之间的依赖关系图, 它可以帮助我们解决循环依赖的问题。 准备工作 使用如下命令安装查看图片文件所需的 graphviz 软件包: # apt-get
编写的PHP扩展需要需要依赖另外一个扩展,在PHP-X中可以调用Extension->require来实现。 PHPX_EXTENSION() { Extension *ext = new Extension("test", "0.0.1"); ext->require("swoole"); ext->require("sockets"); return ext;
依赖关系 这是一个非常轻量级的模块,没有其他依赖项。希望大家在JVM或Android上使用以太坊的RLP编码的项目时会选择使用这个模块,而不再编写自己的实现。