我有一堆运行的actor需要将顺序排队的任务排队,一次一个。我需要一个actor来处理队列中的任务。是否可以创建一个actor并将对该actor的引用作为参数传递给每个作业(一个隐式队列)?实施例
演员:
class QActor extends Actor{
def receive = {
case input => sender ! doSomething(input)
}
}
发件人
val future = myQActor ? msg
Await.result(future)
答案 0 :(得分:4)
使用另一个actor及其邮箱作为队列很好,只是不要阻止发件人。
答案 1 :(得分:1)
你的方法看起来很好,但有一点需要注意。询问模式(?
)需要隐式超时,之后如果没有收到回复,则Future会因超时错误而失败。如果您有多个actor同时要求您的QActor
按顺序处理每个请求,则可能很难知道设置的合理超时是多少。最好使用myQActor ! msg
并在发件人的Receive
中实施处理程序以处理预期的响应。