Scala 如何使用Akka流中的Source.Queue
我正在尝试使用演员提供的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:
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()`
}