Akka流在一个元素后停止

时间:2016-06-28 16:39:14

标签: akka-stream

我的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中的日志消息也只打印一次。

我需要使用什么接收器才能使元素无限期地通过流动?

1 个答案:

答案 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