Disruptor:启动时设置顺序

时间:2013-11-06 15:59:28

标签: java disruptor-pattern

在事件处理应用程序中,我想记录所有已处理事件的序列号以用于日记目的。这些序列号必须是唯一的,因此在重新启动时,应用程序需要检索已使用的最大数字(水印)并确保它为新事件分配更高的数字。

应用程序使用已经具有序列概念的LMAX Disruptor - 每次发布到环形缓冲区和从环形缓冲区读取都与序列号相关联。但是,系统重新启动时,该数字将重置为0。 有没有办法在启动破坏者之前将初始序列号设置为特定值?

另一种解决方案是使用disruptor提供的sequence-since-restart数字,并在启动时添加读取的水印,但是必须在需要全局序列号的地方执行该操作,所以我'如果我可以依赖破坏者集中控制的号码,我更愿意。

2 个答案:

答案 0 :(得分:1)

RingBuffer有一个resetTo()方法,您应该可以调用它。请注意,我自己从未尝试过这个。

答案 1 :(得分:1)

您需要initialise您的序列到您的日记值。

通过Dirsruptor dsl不容易暴露,因此您需要实例化自己的EventProcessors并在那里提供初始序列。