我的akka流在单个元素后停止。这是我的流:
FirehoseActor
Request
连接到Twitter firehose并将消息缓冲到队列。当actor收到take
消息时,它def receive = {
case Request(_) =>
logger.info("Received request for next firehose element")
onNext(RawTweet(queue.take()))
}
是下一个元素并返回它:
Sink.onComplete
问题是只有一条推文被打印到控制台。该程序不会退出或抛出任何错误,我已经在周围散布了日志记录,并且没有打印出来。
我认为接收器会继续施加压力来拉动元素,但情况似乎并非如此,因为Sink.ignore
中的任何消息都没有打印出来。我也尝试使用for i := 0, j := 1; i < 10; i++, j++ {...}
,但也只打印了一个元素。 actor中的日志消息也只打印一次。
我需要使用什么接收器才能使元素无限期地通过流动?
答案 0 :(得分:0)
啊我应该尊重我的演员totalDemand
。这解决了这个问题:
def receive = {
case Request(_) =>
logger.info("Received request for next firehose element")
while (totalDemand > 0) {
onNext(RawTweet(queue.take()))
}
我希望流中的每个元素都会收到Request
,但显然每个Flow都会发送Request
。