Akka Streams ActorRefSource消息顺序

时间:2016-08-31 06:33:00

标签: scala akka akka-stream

我想使用akka Streams'来构建一个项目序列。 ActorRefSource。所述源连续地输入数据。计算完成后,Stream将使用Poison Pill终止。

以下简化示例显示了我的意图:

val source = Source.actorRef[Int](1000, OverflowStrategy.fail)
    .mapMaterializedValue{ ref =>
      for(i <- 1 to 1000) {
        ref ! i
      }

      ref ! PoisonPill
    }

    source.runWith(Sink.seq).foreach(s => println("count: "+s.size))

我期待Stream处理所有1000个元素,然后由于收到Poison Pill而终止。不幸的是,Stream通常会更早地终止。示例输出是:

count: 24

在发送毒丸之前等待一段时间,例如1000毫秒导致所有数字都被处理。

如果在收到Poison Pill之前如何确保所有物品都已经过处理,我们将非常感谢。

1 个答案:

答案 0 :(得分:2)

请参阅the documentation for Source.actorRef:PoisonPill在终止流之前不会刷新缓冲区。