如何知道akka中SourceQueue的已用缓冲区大小?

时间:2017-02-08 16:13:26

标签: scala queue akka-stream

所以我很喜欢使用Source.queue,现在我想监视它,知道它在某个时刻使用了多少缓冲区。但我还没有看到一种了解这种信息的方法。只有想到的是一种解决方法,其中我有一个可变数字,当我提供一个元素时我会添加它,并在操作完成时减去。

1 个答案:

答案 0 :(得分:2)

您可以更改QueueSource类以提供公开其内部缓冲区大小的实体化队列。这可以通过创建新特征来完成 - 例如

trait SourceQueueWithCompleteAndSize[T] extends SourceQueueWithComplete[T] {
  def size: Int
}

然后,在阶段的最后部分(请参阅原始code以供参考),您需要提供新的特征实现而不是SourceQueueWithComplete。您应该能够使用used方法访问内部缓冲区的大小。

(stageLogic, new SourceQueueWithCompleteAndSize[T] {
  // other methods implementations

  override def size: Int = stageLogic.buffer.used // NEW BIT
})

要复制的代码数量相当多,但它可能比在舞台上添加外部计数器更好。也可能是对akka-stream-contrib的有效贡献。