Spring 获取环形缓冲区中的当前消息数

Spring 获取环形缓冲区中的当前消息数,spring,reactor,disruptor-pattern,lmax,Spring,Reactor,Disruptor Pattern,Lmax,我在web应用程序中使用Spring的Reactor模式。在内部,它使用LMAX的RingBuffer实现作为其消息队列之一。我想知道是否有任何方法可以动态地找出当前的RingBuffer占用率。它将帮助我确定所需的生产者和消费者的数量(以及它们的相对速率),以及作为消息队列的RingBuffer是否得到了最佳使用。 我尝试了reactor.event.dispatch.AbstractSingleThreadDispatcher类的getBacklog(),但它似乎总是给出相同的值:我在实例化

我在web应用程序中使用Spring的Reactor模式。在内部,它使用LMAX的RingBuffer实现作为其消息队列之一。我想知道是否有任何方法可以动态地找出当前的RingBuffer占用率。它将帮助我确定所需的生产者和消费者的数量(以及它们的相对速率),以及作为消息队列的RingBuffer是否得到了最佳使用。 我尝试了reactor.event.dispatch.AbstractSingleThreadDispatcher类的getBacklog(),但它似乎总是给出相同的值:我在实例化reactor时使用的RingBuffer的大小。

如果您能了解这个问题,我们将不胜感激。

请使用com.lmax.disruptor.Sequencer.remainingCapacity() 要访问Sequencer实例,您必须显式创建它以及RingBuffer

public long outMessagesCount() {
    return RING_BUFFER_OUT_SIZE - sequencer.remainingCapacity();
}
在我的例子中,输出中断器的初始化

Disruptor<MessageEvent> outcomingDisruptor = 
    new Disruptor<MessageEvent>(
        MyEventFactory.getInstance(),
        RING_BUFFER_OUT_SIZE, 
        MyExecutor.getInstance(), 
        ProducerType.SINGLE, new BlockingWaitStrategy());

使现代化 小错误:| 我们需要outmessagescont而不是getOutCapacity

public long outMessagesCount() {
    return RING_BUFFER_OUT_SIZE - sequencer.remainingCapacity();
}

中最新版本的reactor core(版本1.1.4)无法动态监视消息队列的状态。但是,在查看上的reactor代码之后,我找到了,它允许通过其
remainingSlots()
方法在运行时跟踪消息队列(如果底层dispatcher实现支持)。最简单的选择是编译源代码并使用它。

但是如果您需要在另一个框架内监控干扰程序
剩余容量
,而
sequencer
未公开,该怎么办?e、 g.问题在于基于disruptor的log4j2异步记录器:据我调查,没有有效的方法可以在那里获取
sequencer
。看起来有一个选项是只使用ringBuffer.remainingCapacity(),它是公共的。@yetanothercoder log4j2中有没有办法将remainingCapacity作为bean公开?
public long outMessagesCount() {
    return RING_BUFFER_OUT_SIZE - sequencer.remainingCapacity();
}