在事件处理应用程序中,我想记录所有已处理事件的序列号以用于日记目的。这些序列号必须是唯一的,因此在重新启动时,应用程序需要检索已使用的最大数字(水印)并确保它为新事件分配更高的数字。
应用程序使用已经具有序列概念的LMAX Disruptor - 每次发布到环形缓冲区和从环形缓冲区读取都与序列号相关联。但是,系统重新启动时,该数字将重置为0。 有没有办法在启动破坏者之前将初始序列号设置为特定值?
另一种解决方案是使用disruptor提供的sequence-since-restart数字,并在启动时添加读取的水印,但是必须在需要全局序列号的地方执行该操作,所以我'如果我可以依赖破坏者集中控制的号码,我更愿意。
答案 0 :(得分:1)
RingBuffer有一个resetTo()方法,您应该可以调用它。请注意,我自己从未尝试过这个。
答案 1 :(得分:1)
您需要initialise您的序列到您的日记值。
通过Dirsruptor dsl不容易暴露,因此您需要实例化自己的EventProcessors并在那里提供初始序列。