如何创建不受背压影响的源

How to create a Source which is not affected by backpressure

我想测试一些 Akka 流功能,例如 conflate。为此,我需要在简单的单元测试中构建一个不受背压影响的源。像

这样天真的尝试
Source.tick(1.milli, 1.milli, "tick").map(_ => Random.nextDouble())

由于背压不工作。 OTOH 通过 HTTP 可能有点矫枉过正。

如何为不受背压影响的单元测试创​​建简单Source

您可以使用 Source.actorRef,它在设计上没有启用背压。请参阅以下示例:

  val actorRef: ActorRef = Source.actorRef(0, OverflowStrategy.dropNew)
      .map(_ => Random.nextDouble())
      .to(yourSink).run()

  system.scheduler.schedule(1.milli, 1.milli, actorRef, "tick")(system.dispatcher)

这里bufferSize参数和溢出策略是随机选择的,您需要根据自己的测试需要进行调整。

有关 Source.actorRef 的更多信息,请参阅 docs