具有长 运行 任务的队列的 Actor 设计

Actor design for queue with a long running task

我有一堆 actor 运行 需要将要按顺序处理的任务排队,一次处理一个。我需要一个演员来处理队列中的任务。创建一个演员并将对该演员的引用作为参数传递给每个作业(隐式队列)是否可以?例如

演员:

class QActor extends Actor{
  def receive = {
    case input => sender ! doSomething(input)
  }
}

发件人

val future = myQActor ? msg
Await.result(future)

使用另一个 actor 及其邮箱作为队列是可以的,只是不要阻塞发件人。

您的方法看起来不错,但有一点需要注意。询问模式 (?) 需要一个隐式超时,如果没有收到回复,则 Future 将失败并出现超时错误。如果您有多个参与者同时询问您的 QActor 哪个按顺序处理每个请求,则可能很难知道设置什么是合理的超时。最好使用 myQActor ! msg 并在发件人的 Receive 中实施处理程序来处理预期的响应。