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