Scala 如何使用Akka流中的Source.Queue

Scala 如何使用Akka流中的Source.Queue,scala,akka-stream,Scala,Akka Stream,我正在尝试使用演员提供的source.queue。我被困在与报价操作结果的部分匹配中 class MarcReaderActor(file: File, sourceQueue: SourceQueueWithComplete[Record]) extends Actor { val inStream = file.newInputStream val reader = new MarcStreamReader(inStream) override def receive:

我正在尝试使用演员提供的source.queue。我被困在与报价操作结果的部分匹配中

class MarcReaderActor(file: File, sourceQueue: SourceQueueWithComplete[Record])  extends Actor {

  val inStream = file.newInputStream
  val reader   = new MarcStreamReader(inStream)

  override def receive: Receive = {

    case Process => {
      if (reader.hasNext()) {
        val record = reader.next()
        pipe(sourceQueue.offer(record)) to self
      }
    }

    case f:Future[QueueOfferResult] => 
    }
  }
}
我不知道如何检查它是否排队、被丢弃或失败


如果我编写f:Future[QueueOfferResult.Enqueued]编译文件

因为您使用的是
pipeTo
,您不需要在Future上进行匹配-Future的内容将在该Future完成时发送给参与者,而不是Future本身。这样做:

override def receive: Receive = {
  case Process => 
    if (reader.hasNext()) {
      val record = reader.next()
      pipe(sourceQueue.offer(record)) to self
    }

  case r: QueueOfferResult => 
    r match {
      case QueueOfferResult.Enqueued =>     // element has been consumed
      case QueueOfferResult.Dropped =>      // element has been ignored because of backpressure
      case QueueOfferResult.QueueClosed =>  // the queue upstream has terminated
      case QueueOfferResult.Failure(e) =>   // the queue upstream has failed with an exception
    }

  case Status.Failure(e) =>  // future has failed, e.g. because of invalid usage of `offer()`
}