我有一堆正在运行的actor,它们需要排队等待依次处理的任务,每次一个。我需要一个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
中实现处理程序来处理预期的响应可能会更好。