Как создать источник, на который не влияет противодавление


Я хочу протестировать некоторые функции Akka streams, такие как conflate. Для этого мне нужно построить источник, на который не влияет противодавление в рамках простого юнит-теста. Наивные попытки вроде

Source.tick(1.milli, 1.milli, "tick").map(_ => Random.nextDouble())

Не работают из-за противодавления. Ото, идущий через HTTP, вероятно, перебор.

Как бы я создал простой Source для модульного теста, на который не влияет противодавление?

1 3

1 ответ:

Вы можете использовать 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 .