Sequencer
void claim(long sequence);
声明一个具体的序列号。只有当RingBuffer初始化为一个具体值时使用这个方法。
boolean isAvailable(long sequence);
一个序列号被发布并且事件可以用来使用的;非阻塞。如果序列号可以用来使用返回true;否则返回false。
void addGatingSequences(Sequence... gatingSequences);
给disruptor实例添加一个指定的门槛序列号。这将会安全并且自动地添加到门槛序列号列表中。
boolean removeGatingSequence(Sequence sequence);
删除门槛序列号。
SequenceBarrier newBarrier(Sequence... sequencesToTrack);
创建一个新的SequenceBarrier。交给EventProcessor来使用。用来跟踪ring buffer的给定的序列号列表中,看读取的消息是否 可用。
long getMinimumSequence();
获取从所有添加到ring buffer的门槛序列号(gating sequences)中,最小的序列号。
long getHighestPublishedSequence(long nextSequence, long availableSequence);
获取从ring buffer中可以安全读取的最高的序列号。
Cursored
接下来看下Cursored。
(很简单,只有一个抽象方法。不再叙述。)
Sequenced
然后看下Sequenced。
int getBufferSize();
ring buffer中能够存储键值对的数量。
boolean hasAvailableCapacity(int requiredCapacity);
是否有指定的容量可用。
long remainingCapacity();
获取这个Sequencer中剩余的容量。
long next();
声明下一个要发布的事件,返回序列号。
long next(int n);
声明之后的n个要发布的序列号。批量事件生产。
* int n = 10;
* long hi = sequencer.next(n);
* long lo = hi - (n - 1);
* for (long sequence = lo; sequence <= hi; sequence++) {
* // Do work.
* }
* sequencer.publish(lo, hi);
long tryNext() throws InsufficientCapacityException;
尝试声明要发布的下一个事件。如果有要求容量的slot,那么就返回slot的数量。如果没有空间可用,直接抛出异常。
long tryNext(int n) throws InsufficientCapacityException;
(同理)
void publish(long sequence);
发布一个序列号。当事件填充完毕时,这个方法被调用。
void publish(long lo, long hi);
批量发布序列号。当事件填充完毕时,这个方法被调用。
AbstractSequencer
不同Sequencer类型(single/multi)的基类。提供了常见的功能像门槛序列号(add/remove)和当前游标的关系的管理。
bufferSize必须大于等于1并且是2的n次幂。