给出如此的队列:
val queue: Queue[Int] = async.boundedQueue[Int](1000)
我想拉下这个队列并将其流式传输到下游接收器中,最多为100个。
queue.dequeue.chunk(100).to(downstreamConsumer)
有点工作,但如果我说101条消息,它就不会清空队列。将剩下1条消息,除非另外99条被推入。我想尽可能多地从队列中取出100个,就像我的下游进程可以处理的那样快。
是否有现有的组合器?
答案 0 :(得分:0)
为此,您可能需要在从队列中出队时监视队列的大小。然后,如果大小达到0,你就不会等到任何更多的元素。实际上,您可以根据队列的大小实现批处理的elastic
大小调整。即:
val q = async.unboundedQueue[String]
val deq:Process[Task,(String,Int)] = q.dequeue zip q.size
val elasticChunk: Process1[(String,Int), Vector[String]] = ???
val downstreamConsumer : Sink[Task,Vector[String]] = ???
deq.pipe(elasticChunk) to downstreamConsumer
答案 1 :(得分:0)