创建源时将Future [Done]指定为实现值

时间:2019-04-08 19:12:22

标签: scala akka akka-stream

我正在尝试编写一些代码,作为更大的集成测试的一部分。

我有一个函数可以创建类型为KinesisSource的{​​{1}}:

Source[KinesisRecord, Future[Done]

我想从文件中创建相同类型的伪造源。我有(对不起代码,我是scala的新手):

protected def createKinesisSource(config: KinesisClientLibConfiguration): Source[KinesisRecord, Future[Done]]#Repr[MyFile.KinesisFlow] = {
  KinesisSource(config).mapAsync(1)(processRecord)
}

protected def processRecord(record: KinesisRecord): Future[KinesisFlow] = {
    Future { validateRecord(record) }
}

这给了我val records = scala.io.Source.fromFile("testFile.txt").getLines.toList .map(i => { new KinesisRecord( ByteString.fromString(i), "x", None, "x", None, Instant.now(), "x") }) Source(records).mapAsync(1)(processRecord) 。如何将其更改为Source[KinesisRecord, NotUsed]?我知道第二个参数是具体值(see this post),但是我不确定在不实际应用Source[KinesisRecord, Future[Done]]函数的情况下如何指定该值。

1 个答案:

答案 0 :(得分:2)

您可以使用mapMaterializedValue(_ => Future.successful(Done))Future.never

但是,如果物化价值在您的集成测试中产生影响,那么这将对其产生影响,因为未来将在物流物化后立即完成,或者永远不会完成。